Simplifier une fonction VBA

Résolu
domyno4 -  
 domyno4 -
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

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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
    1. domyno4
       
      Génial, ça marche !!
      Je vais me renseigner sur cette histoire de boucle pour mieux comprendre
      Merci beaucoup
      Bonne journée
      0