Problème de boucle For Each
Bonjour à tous,
Je vous contacte car je rencontre un problème macro.
En effet, je tente d'appliquer une boucle sur un ensemble de feuille (4 au total) à l'exception d'une seule intitulée "Base poste" (ce qui se trouve après est vraiment une macro simpliste pour comprendre d'où vient mon problème d'exécution, on est simplement sur un changement de couleur de police).
Voici la macro:
Dim wSht As Worksheet
For Each wSht In WorksheetsIf wSht.Name <> "Base poste" Then
Cells.Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
End If
Next
End Sub
Problème : la macro ne s'exécute que sur la feuille sur laquelle je suis quand je la lance, et même si je la lance depuis la feuille "base poste".
Je ne vois vraiment pas d'où peut venir le soucis.
Merci pour votre aide :)
Bonjour Bromain, le forum,
Tu ne précise pas sur quelle feuille sont les cellules...donc par défaut seules celles de la feuille active (sauf Base poste) seront modifiées.
Essaies ainsi:
Sub color()
Dim wSht As Worksheet
For Each wSht In Worksheets
If wSht.Name <> "Base poste" Then
With wSht.Cells.Font
.color = -16776961
.TintAndShade = 0
End With
End If
Next wSht
End Sub
Cordialement,
Super !!! Merci beaucoup ça fonctionne parfaitement.
Bon par contre je pensais que cela me permettrait de créer des boucles sur toutes les feuilles pour tout et n'importe quoi.
Sauf que, je dois transposer des cellules, et le début de ne marche pas? et je pense que cela vient du .font,
Voici mon codage:
"Dim wSht As Worksheet
For Each wSht In Worksheets pour toutes les feuilles
If wSht.Name <> "Base poste" Then sauf pour la feuille intitulée "Base poste"
With wSht.Cells.Font
Range("A1:E5").Select je sélectionne les cellules
Selection.Copy je copie ma sélection
Range("A6").Select je me positionne sur la cellule de destination
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True je copie en transposant colonnes et lignes
Range("A1:E5").Select je resélectionne les cellules dont je n'ai plus besoin
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp je les supprime en décalant toutes les lignes vers le haut afin que mes données transposées se retrouve en haut de la feuille
End With
End If
Next wSht
End Sub"
je sais bien que ce n'est pas très propre mais c'est le seul moyen que j'ai trouvé pour transposer ligne et colonne (le copier / coller / supprimer /décaler vers le haut).
et cela je dois le faire pour toutes les feuilles que je créerai, sauf pour certaines feuilles.
Franchement déjà un grand merci pour la première réponse, et j'espère que tu sauras répondre à mon second problème :)
Bonjour,
Les mêmes cose produisent les mêmes effets 😘
select,sélection et autres activate ne concerne que la feuille active.
le For Each wSht In Worksheets implique de dérouler ton code de la Racine wSht.
wSht.Range("A1:E5").Copy wSht.Range("A6")
a moins que ce soit un truc comment ça ??????
Range("A1:E5").Copy wSht.Range("A6")
Bonjour…
Ta dernière porposition laisse à supposer que les feuilles affectées contiennent un tableau de 5 sur 5 au même endroit.
Dans ce cas, dans la plage des codes de ThisWorkbook figurera la macro (qui transposera le tableau de l’onglet activé) :
Private Sub WorkBook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Base poste" Then Exit Sub
Application.ScreenUpdating = 0
[A6].Resize(5, 5) = Application.Transpose([A1:E5]) 'plage de 5 sur 5 données
[A1:E5].Delete
End Sub
Nota : un léger clignotement indiquera l’action et après la réactivation de la feuille, on retrouvera la plage d’origine.
On pourra aussi choisir un autre lancement global.
Bonjour à tous,
Pour compléter ma proposition en me basant sur celle de Ordonc
Sub color()
'déclare la variable feuille wSht
Dim wSht As Worksheet
'boucle sur toutes les feuilles du classeur
For Each wSht In Worksheets
'si le nom de la feuille est différent de Base poste
If wSht.Name <> "Base poste" Then
'agit sur la feuille
With wSht
'agit sur toutes les cellules de la feuille
With .Cells.Font
.color = -16776961
.TintAndShade = 0
End With
'transpose les données de la plage A1:E5 en A1
.Range("A1").Resize(5, 5) = Application.Transpose(.Range("A1:E5"))
End With
End If
'prochaine feuille
Next wSht
End Sub
Bon test...
Cordialement,
Franchement un grand merci à tous,
En plus de m'avoir apporté la solution, vous avez allégé la macro.
Et un merci spécial à toi xorsankukai pour le suivi et qui m'a même fourni en commentaire les explications pour chaque ligne :D
bonne journée à tous