Problème pour appliquer une macro à toutes les feuilles d'un classeur.

Sly3d

XLDnaute Nouveau
Bonjour,

Je suis nouveau sur ce forum qui m'a bien souvent aidé, mais cette fois, j'ai un problème que je ne peux résoudre, même si globalement il me semble que je fais ce qui est conseillé... C'est une question courante, mais je n'ai pas réussi à l'appliquer à mon document... Donc je vous remercie d'avance si vous pouviez m'aider.

J'ai un classeur contenant une centaine de feuilles, et j'ai un code qui va chercher pour quelques cases de la colonne A une valeur particulière, et s'il la trouve, va modifier la couleur de la ligne en conséquence, et j'aimerais l'appliquer à chaque onglet, malheureusement, malgré des solutions trouvées ici et ailleurs, je n'ai pas réussi à résoudre mon problème. Voilà mon code (le mot "cheval" est quelconque hein, je précise) :

Sub Test()

Dim Feuille As Worksheet

For Each Feuille In Worksheets

Dim Mot As String
Mot = "*Cheval*"


If Range("A11").Value Like Mot Then
Range("A11:G11").Interior.Color = RGB(192, 192, 192)
End If
If Range("A12").Value Like Mot Then
Range("A12:G12").Interior.Color = RGB(192, 192, 192)
End If
If Range("A13").Value Like Mot Then
Range("A13:G13").Interior.Color = RGB(192, 192, 192)
End If


Next

End Sub

Donc voilà, je sais, j'aurais pu utiliser une boucle (il y a plus de lignes) pour définir la ligne, mais je ne suis pas encore à l'aise, et le projet n'est pas assez important pour que je m'y attarde sur cette partie là. Par contre, je n'arrive pas à l'appliquer à toutes les feuilles, et ça c'est important. J'ai placé le code dans "ThisWorkbook", pas dans une feuille, et malgré quelques changements ("For Each Worksheet in Worksheets, Next", "For Each Feuille in ThisWorkbook.Worksheets", etc.), je n'ai pas réussi à le faire travailler dans tout le classeur.

Si je prends les pages séparément pour appliquer ma macro, elle marche, donc elle ne se sent pas liée qu'à une seule feuille, mais je n'arrive pas à aller chercher toutes les pages. Auriez-vous une solution qui pourrait peut-être résoudre mon problème?

En vous remerciant d'avance,
Sly
 

Papou-net

XLDnaute Barbatruc
Re : Problème pour appliquer une macro à toutes les feuilles d'un classeur.

Bonjour Sly3d, et bienvenue,

Apparemment, ton problème provient d'une mauvaise syntaxe dans ton code. Lorsque tu utilises With...End With, il te faut faire précéder les références des objets par un point.

Ex :

Code:
Sub Test()

Dim Feuille As Worksheet
For Each Feuille In Worksheets
Dim Mot As String
Mot = "*Cheval*"
If .Range("A11").Value Like Mot Then
.Range("A11:G11").Interior.Color = RGB(192, 192, 192)
End If
If .Range("A12").Value Like Mot Then
.Range("A12:G12").Interior.Color = RGB(192, 192, 192)
End If
If .Range("A13").Value Like Mot Then
.Range("A13:G13").Interior.Color = RGB(192, 192, 192)
End If
Next

End Sub
Autrement, les actions s'adressent à la feuille active.

Cordialement.
 

Sly3d

XLDnaute Nouveau
Re : Problème pour appliquer une macro à toutes les feuilles d'un classeur.

Ho, nickel!

Merci beaucoup Papou-net, je reviens du repas et je trouve une réponse qui fonctionne, merci beaucoup.

J'ai effectivement modifié mon code, rajouté un "With, End With" et des points, pour obtenir ça :
Code:
Sub Test()

Dim Feuille As Worksheet
For Each Feuille In Worksheets
Dim Mot As String
Mot = "*Cheval*"
With Feuille
If .Range("A11").Value Like Mot Then
.Range("A11:G11").Interior.Color = RGB(192, 192, 192)
End If
If .Range("A12").Value Like Mot Then
.Range("A12:G12").Interior.Color = RGB(192, 192, 192)
End If
If .Range("A13").Value Like Mot Then
.Range("A13:G13").Interior.Color = RGB(192, 192, 192)
End If
End With
Next

End Sub

Et en plus j'aurai appris une règle de base en VBA, splendide. :)
Merci beaucoup, problème réglé en très peu de temps!
 

Efgé

XLDnaute Barbatruc
Re : Problème pour appliquer une macro à toutes les feuilles d'un classeur.

Bonjour Sly3d, Bonjour Papou-Net :)

Je passe juste comme ça.
Pour éviter les lignes de codes et surtout pour éviter de définir des variables à l'intérieur d'une boucle....

VB:
Sub Test()
Dim Feuille As Worksheet, Mot As String, Cel As Range, Coul As Long
Coul = RGB(192, 192, 192)
Mot = "*Cheval*"
For Each Feuille In Worksheets
    With Feuille
        For Each Cel In .Range("A11:A13") 'Definir la plage ici
            If Cel.Value Like Mot Then
                .Range("A" & Cel.Row & ":G" & Cel.Row).Interior.Color = Coul
            End If
        Next Cel
    End With
Next Feuille
End Sub
Cordialement
 
Dernière édition:

Sly3d

XLDnaute Nouveau
Re : Problème pour appliquer une macro à toutes les feuilles d'un classeur.

Alors là, franchement, incroyable!

J'ai modifié mon code avec la boucle, et ça marche nickel! Je savais bien qu'il y avait une boucle qu'on pouvait utiliser (j'aurais utilisé une Do, While, mais j'aurais été bloqué pour changer la couleur de la ligne jusqu'à un point précis), donc merci beaucoup, ça m'allège bien le code (le code entier allait de A10 à A40, donc c'était vite pesant).

Donc merci beaucoup Efgé et Papou-net, vous m'avez vraiment bien aidé sur ce coup-là! :)
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou