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 Worksheets
If 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

Rechercher des sujets similaires à "probleme boucle each"