XL 2013 Macro sur plusieurs feuilles selon critère

D10

XLDnaute Junior
Bonjour
J'ai un fichier excel avec une quarantaine de feuille.
J'aimerais faire tourner une macro sur des feuilles qui contiennent un mot dans une cellule précise (à chaque fois la même).
Si la feuille contient le mot alors trier par ordre alphabétique..
Et si la cellule d'une feuille X ne contient pas le mot recherché alors j'aimerais passer à la feuille suivante. Et ainsi de suite

j'ai un début de code mais qui ne fonctionne par encore parfaitement...Il ne fonctionne que sur la feuille sur laquelle je suis, et non pas dans les autres feuilles également..

Code:
Sub Tri()

For Each ws In ActiveWorkbook.Worksheets()
    If ws.Range("B4") = "Valeur_" Then

Range("B4:CI80").Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    End If

Next ws
 
End Sub

Encore merci !
 

Boo2bafoot

XLDnaute Nouveau
Bonjour D10,

Essayez ceci ?

Sub Tri()

NbFeuille = ActiveWorkbook.Sheets.Count
Sheets(1).Activate

For i = 1 To NbFeuille
Sheets(i).Activate
If ws.Range("B4") = "Valeur_" Then
Range("B4:CI80").Select
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=True, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
End If
Next i

End Sub
 

D10

XLDnaute Junior
Bonsoir,
Merci pour ta réponse, mais ça ne marche pas.
Petite p/récision, si ça peut aider ou rendre la chose plus simple, les feuilles qui sont concernées par le tri, ont toutes l'onglet de couleur jaune. Peut être, est-il possible de baser la macro en fonction des couleurs des onglets ?
;)
 

job75

XLDnaute Barbatruc
Bonsoir,
Code:
Sub Tri()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
    If ws.[B4] = "Valeur_" Then ws.[B4:CI80].Sort ws.[B4], xlAscending
Next
End Sub
A retenir : en VBA il est généralement inutile de sélectionner des plages ou des feuilles.

Il suffit de bien préciser les feuilles et les plages à traiter.

Edit : en général il vaut mieux préciser si la plage a des en-têtes :
Code:
    If ws.[B4] = "Valeur_" Then ws.[B4:CI80].Sort ws.[B4], xlAscending, Header:=xlYes 'xlNo
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour D10,

Dans un test on peut toujours ajouter des conditions, ici pour la couleur (jaune) de l'onglet :
Code:
Sub Tri()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
    If ws.[B4] = "Valeur_" And ws.Tab.ColorIndex = 6 Then ws.[B4:CI80].Sort ws.[B4], xlAscending
Next
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 312
Membres
102 860
dernier inscrit
fredo67