Simplifier une fonction VBA

Résolu/Fermé
domyno4 - 18 oct. 2016 à 16:41
 domyno4 - 18 oct. 2016 à 17:01
Bonjour,

Je viens de faire ma toute première macro (qui fonctionne) mais je suis sûre qu'elle peut être faite différemment (plus courte surtout)
J'ai un classeur dans lequel il y a plusieurs feuilles.
J'ai des feuilles nommées "RA 1","RA 2"....."RA 30" et une feuille nommée "ALEAS" qui présentent le même tableau et dans lesquels je dois effectuer une série d'actions (la même série chacune de ces feuilles)
J'ai aussi d'autres feuilles avec des noms totalement différent dans lesquelles je ne veux rien faire.
L'idée est que, via deux boutons (macros) la mise en forme de chacune de ces feuilles change (colonnes masquées/démasquées grâce à des poignées déjà présentes dans les tableaux)
J'ai ajouté une petite commande de sélection de cellule après ouverture/fermeture des colonnes pour que le tableau se remette au début pour une meilleure lisibilité
Voici ma première macro qui fonctionne :
Sub Ouverture_Exe_Suivant()

Sheets("RA 1").Select
ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
Columns("AI:AX").Select
Selection.EntireColumn.Hidden = False
Range("O13").Select
Sheets("RA 2").Select
ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
Columns("AI:AX").Select
Selection.EntireColumn.Hidden = False
Range("O13").Select
[...] (je fais plus court car je vous laisse imaginer la longueur du texte)
Sheets("RA 30").Select
ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
Columns("AI:AX").Select
Selection.EntireColumn.Hidden = False
Range("O13").Select
Sheets("ALEAS").Select
ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
Columns("AI:AX").Select
Selection.EntireColumn.Hidden = False
Range("O13").Select

End Sub

J'ai fait le tour d'internet (jamais eu de formation VBA donc je ne comprends pas grand chose...) pour faire ceci :
Sub Ouverture_Exe_Suivant()

Dim sh As Worksheets
If sh.Name Like "RA*" Or sh.Name = "ALEAS" Then
ActiveSheet.Outline.ShowLevels rowlevels:=0, columnlevels:=1
Columns("AI:AX").Select
Selection.EntireColumn.Hidden = False
ActiveSheet.Range ("O13").Select
Else
Exit Sub
End If

End Sub

Je ne sais pas si je suis claire dans mon explication mais j'aurais besoin d'un petit coup de main car cette deuxième fonction m'envoie le message "Erreur d'exécution '91' : Variable objet ou variable de bloc With non définie".

Merci d'avance !

1 réponse

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
18 oct. 2016 à 16:49
Bonjour,

1) A l'avenir, pense à utiliser les BALISES DE CODE pour poster du code sur le forum (histoire que ça soit lisible :-))

2 - Pour ton code.. il faut boucler sur toutes les feuilles de ton classeur.
Essayes ça :

Sub Ouverture_Exe_Suivant()
  
  For Each Sh In ActiveWorkbook.Sheets
     Debug.Print Sh.Name
     If Sh.Name Like "RA*" Or Sh.Name = "ALEAS" Then
       
       ActiveSheet.Outline.ShowLevels rowlevels:=0, columnlevels:=1
       Columns("AI:AX").Select
       Selection.EntireColumn.Hidden = False
       ActiveSheet.Range("O13").Select
     End If
   Next
End Sub


0
Génial, ça marche !!
Je vais me renseigner sur cette histoire de boucle pour mieux comprendre
Merci beaucoup
Bonne journée
0