Signaler

Simplifier une fonction VBA [Résolu]

Posez votre question domyno4 - Dernière réponse le 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 !
Afficher la suite 
Utile
+0
moins plus
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


domyno4- 18 oct. 2016 à 17:01
Génial, ça marche !!
Je vais me renseigner sur cette histoire de boucle pour mieux comprendre
Merci beaucoup
Bonne journée
Répondre
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !