Toutes mes réponses sur les forums
-
AuteurMessages
-
Philgood.001
ParticipantBonsoir Francis,
Toutes mes excuses pour avoir laissé ce post en l’état…
Depuis le temps…Je reviens donc dessus pour en finir avec cette question.
Je rappelle la question posée :Comment relier un bouton Active X identique sur plusieurs onglets à une seule macro?
– Au début, j’avais copié-collé la même macro sur toutes les feuilles VBA.
Mais pour chaque modif. ou amélioration du code, je devais refaire la même manip pour
toutes les feuilles…– Après votre réponse quant à la possibilité de le faire, j’ai trouvé une solution
alternative :Recopier une commande simple dans chaque feuille VBA appelant la macro dans le Module1 où
se trouvait le code à exécuter, ce qui donne :* Sheet :
`Private Sub ViderCellules_Click()
‘ VIDER_CELLULES Macro
‘Call ViderCellules
ViderCellulesModuleEnd Sub`
* Module1 :
`Sub ViderCellulesModule()
‘ VIDER_CELLULES Macro
Range(“C7:D10,F7:G10,C13:D14,F13:G14,C16:D23,F16:G23,C25:D30,F25:G30,C32:D35,F32:G35,C38:D39,F38:G39,C41:D42,F41:G42,C44:D45,F44:G45,C47:D50,F47:G50,C52:D56,F52:G55”).Select
Selection.ClearContentsActiveSheet.Next.Select
Range(“B7:C34”).Select
Selection.ClearContentsRange(“C34”).Select
ActiveSheet.Previous.Select
Range(“D7”).Select
End Sub`
Cette méthode fonctionne parfaitement, mais je me rends compte que si toutes mes feuilles sont déjà créées et que je décide d’ajouter ce bouton sur chacune d’entre elles, cela devient très long à faire.
Y-a-t’il une solution qui joigne directement le bouton de chaque feuille à la macro du Module1 plutôt que de passer par l’intermédiaire de chaque “sheet”?Merci à vous Francis.
Philgood.001.
Philgood.001
ParticipantBonsoir,
Désolé Francis. Je m’aperçois que vous me vous-voyez et que je vous tutoie…
Toutes mes excuses! Je m’aligne et passe donc au vouvoiement.
A très bientôt.
Bonne soirée.Philgood.001.
Philgood.001
ParticipantBonjour Francis,
Merci pour ton retour rapide.
En effet je suis d’accord avec toi s’il s’agit d’un bouton en mode “Formulaire”.
Mais j’ai oublié de préciser que pour des raisons esthétiques et pratiques, je préfère utiliser un bouton “ActiveX” dont je pourrai personnaliser la couleur. Et dans ce cas, ta proposition ne fonctionne pas.
Comment faire pour simplifier de la même façon qu’avec le mode “Formulaire”?Merci à toi Francis.
Philgood.001.
Philgood.001
ParticipantBonjour Francis,
Merci pour les infos. Je vais garder la formule actuelle pour l’instant.
J’ai une dernière question toujours sur ce classeur :
Sur chaque onglet, j’ai un bouton “Imprimer” (qui avant d’imprimer, cache certaines colonnes puis imprime puis ré-affiche lesdites colonnes). Du coup j’ai le même code sur 24 onglets (pour l’instant…).
Mais si je veux modifier le code par ex., je dois le faire pour chaque onglet, et ce 24 fois!!!Y-a-t-il donc une solution qui permette de centraliser la formule d’impression quelque part et de ne créer que des renvois standardisés sur chaque onglet vers la formule générale d’impression?
J’avais pensé mettre la formule dans “ThisWorkBook” et mettre un renvoi dans chaque “Sheets”.
Qu’en penses-tu? Par contre pour le code je ne sais pas faire…Merci encore à toi.
A bientôt.
Philgood.001.
Philgood.001
ParticipantBonjour Francis,
Bon, je pense que je vous pense que je vous ai lassé avec mes questions sans fin.
Je comprends.
Merci beaucoup pour votre aide. Je vais conserver ces codes bien au chaud.
Bon we à vous et à bientôt!
Philgood.001
Philgood.001
ParticipantBonjour Francis,
Bon finalement après plusieurs tentatives sans succès, voici ma 2è problématique toujours liée au même tableau:
J’ai mes onglets suivants nommés comme suit:
01.16 Tab – 01.16 Gra – 02.16 Tab – 02.16 Gra – 03.16 Tab – 03.16 Gra – …
Ça continue sur 2017 et c’est amené à faire de même pour les années à suivre, tout ça sur le même classeur.
Le but du jeu est de faire un rappel du contenu de la cellule F45 de l’onglet Tab du mois précédent (ex: 02.16 Tab) dans la cellule G45 de l’onglet Tab du mois suivant (ex: 03.16 Tab), mais en utilisant une formule générique, donc non nominative.
J’ai bien trouvé une formule proposée par http://boisgontierjacques.free.fr/pages_site/indirect.htm mais elle impose de créer un champ en prélude.
Or je voudrais le même principe mais en plus simple à savoir sans ajouter de champ, uniquement avec une formule de cellule, sans macro bien sûr, ni passer par un onglet “Récap” couramment proposé pour l’utilisation de la fonction INDIRECT dans ce type de problématique.
Vu ton niveau d’expertise, je tente ma chance…
Je préviens, je sollicite également mdo100 de http://forum.formuleexcel.com/!
Merci pour ton assistance.
A très bientôt et très bon vote!
Philgood.001
Philgood.001
ParticipantBonjour Francis,
Merci pour la 2è proposition, mais en effet ça ne change rien, notamment quant à la vitesse.
Je garde donc la 1ère version, plus simple à comprendre pour le noob que je suis en VBA…
Merci beaucoup pour votre aide depuis le début.
Je reviendrai peut-être vers vous bientôt, mais cette fois-ci concernant une formule INDIRECT Excel qui me fait des misères.
Mais j’essaie d’abord de trouver seul, sinon toc toc!Merci encore.
Philgood.001
Philgood.001
ParticipantBonjour Francis,
Vous êtes un chef!
Exactement ce que je cherchais! Avec votre code, le masquage est instantané. Le mien le faisait en 2 étapes : d’abord la sélection des onglets puis le masquage de ces derniers.
(enfin le mien… disons le code que j’ai récupéré ailleurs sur le net…).Du coup pour la formule de démasquage, j’ai repris votre base et l’ai modifiée pour obtenir ceci :
Sub TOUT_DEMASQUER() Dim i As Integer For i = 1 To Sheets.Count Sheets(i).Visible = xlSheetVisible Next i Sheets(1).Select Sheets(6).Select End Sub
Mais il me fait défiler tous les onglets du 1er au dernier, tout comme la formule que j’avais initialement. Auriez-vous une idée pour un démasquage aussi instantané que les 2 formules de masquages que vous m’avez proposées?
Merci à vous Francis.
A bientôt.
Philgood.001
ParticipantRe-bonjour Francis,
Vu le code hyper-light que tu as trouvé la semaine dernière, je me permets d’abuser de tes compétences… et de ta patience :
Aurais-tu une variante pour :– masquer les onglets pairs
– masquer les onglets impairs
– tout démasquerdans une version aussi light que la précédente.
J’en ai bien un (ci-dessous) mais avec 24 onglets, je me rends compte que la formule est lourde pour le CPU :
Sub MASQUER_PAIRS() Dim Sht As Worksheet For Each Sht In ActiveWorkbook.Sheets 'tout déselectionner Sht.Select Replace:=True Next Sheets(Sheets.Count).Select Replace:=True ind = 1 For Each Sht In ActiveWorkbook.Sheets If ind Mod 2 = 0 And ind > 5 Then 'si pair Sht.Select Replace:=False End If ind = ind + 1 Sheets(Sheets.Count - 1).Activate Sheets(1).Visible = False Sheets(2).Visible = False Sheets(3).Visible = False Sheets(4).Visible = False Sheets(5).Visible = False Next Sht ActiveWindow.SelectedSheets.Visible = False End Sub
Sub MASQUER_IMPAIRS() Dim Sht As Worksheet For Each Sht In ActiveWorkbook.Sheets 'tout déselectionner Sht.Select Replace:=True Next Sheets(Sheets.Count).Select Replace:=True ind = 1 For Each Sht In ActiveWorkbook.Sheets If ind Mod 2 <> 0 And ind > 5 Then 'si impair Sht.Select Replace:=False End If ind = ind + 1 Sheets(1).Visible = False Sheets(2).Visible = False Sheets(3).Visible = False Sheets(4).Visible = False Sheets(5).Visible = False Next Sht ActiveWindow.SelectedSheets.Visible = False Sheets(6).Select End Sub
Sub TOUT_DEMASQUER() Dim Feuille As Object For Each Feuille In ActiveWorkbook.Sheets Feuille.Visible = xlSheetVisible Next Sheets(6).Select End Sub
Merci à toi Francis.
Bon we.
Philgood.001
ParticipantBonjour Francis,
Désolé pour ma réponse tardive…
Votre code est excellent, ultra léger et donc ultra rapide.
Je prends!!!Merci à vous.
A bientôt.
Philgood.001
ParticipantPS : Je tiens à préciser que je ne veux pas indiquer le nombre d’onglets à inclure dans le code. Celui-ci doit s’adapter au nombre d’onglets au fur et à mesure des variations.
En effet, chaque année je rajouterai 12 nouveaux onglets, et je ne veux pas avoir à modifier chaque fois le code, d’autant plus que mes collègues ne maîtrisent pas du tout le VBA…Merci.
-
AuteurMessages