[Excel] 1 même macro sur plusieurs feuilles?

Fermé
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 - 1 juil. 2009 à 14:08
jjsteing Messages postés 1669 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 - 21 juil. 2009 à 14:41
Bonjour,

Je travaille sur un glossaire et j'aimerais que toutes les données dans les cellules de la colonne A et de la colonne C commence par une majuscule (uniquement pour la 1ere lettre), je ne sais pas s'il existe une formule Excel (autre que NomPropre) pour ça, mais voici ma macro (1 pour la colonne A et l'autre pour la colonne C) :

Sub Transforme_f1fr()

Dim Valeur As String
Dim Plage, Cellule As Range

Set Plage = Range("A6:A3834")

For Each Cellule In Plage
Valeur = Mid(Cellule.Value, 2)
Valeur = UCase(Mid(Cellule.Value, 1, 1)) & Valeur
Cellule.Value = Valeur
Next Cellule

End Sub

Sub Transforme_f1gb()

Dim Valeur As String
Dim Plage, Cellule As Range

Set Plage = Range("C6:C3834")

For Each Cellule In Plage
Valeur = Mid(Cellule.Value, 2)
Valeur = UCase(Mid(Cellule.Value, 1, 1)) & Valeur
Cellule.Value = Valeur
Next Cellule

End Sub

J'ai rentré la macro dans le Module1, et j'aimerais qu'elle s'applique à la deuxième feuille également, car pour le moment elle s'applique seulement sur la 1ere feuille.
Si quelqu'un peut m'aider...
A voir également:

4 réponses

Bonjour

Normal que ça ne marche qu'avec la feuille active, le Range("A1:Z85").Select s'applique à la fenêtre active puisqu'aucune feuille n'est précisée

Tu as deux méthodes :
Soit tu actives les feuilles tour à tour
Soit tu précises la feuille

La 1ère solution :
For Each w In Worksheets 
w.Activate
...


La deuxième solution:
For Each Cell In w.Range("A1:Z85")
(sans le Range("A1:Z85").Select avant)
Note que dans cette deuxième solution, tu économises le select pour travailler directement sur les plages qui t'intéressent.
1
Génial el padre! Ca fonctionne! Je m'étais en effet mélangée les pinceaux...
Merci pour ton aide ;-)
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
1 juil. 2009 à 15:31
Bonjour,

qcq chose m'échappe...
Si tu l'as mise dans un module elle s'applique à la feuille active qcq soit la feuille... (???)
Et pour éviter de traiter des cellules vides pour rien réduit ta plage à la dernière cellule utilisée avec
Set Plage = [A6].Resize([A65536].End(xlUp).Row - 5, 1)

Pour éviter le clignotement de l'écran tu peux aussi ajouter au début :
application.screenupdating = false
tu le remets à true avant de quitter

eric
0
Moi j'essaye aussi de faire une boucle pour chaque feuille mais ça ne marche que pour la feuille active...
Pourriez vous me dire ce qui cloche?

Sub essai()

Dim w As Worksheet
For Each w In Worksheets

'Selectionne la page
Range("A1:Z85").Select

For Each Cell In Selection

'Réinitialise toute la page en blanc
Cell.Interior.ColorIndex = 0

'Colorie en vert les cellules contenant CM ou SJD
If InStr(Cell.Value, "CM") > 0 Or InStr(Cell.Value, "SJD") > 0 Then
Cell.Interior.ColorIndex = 4
End If

'Colorie en jaune les cellule contenant ces critères 1
If Cell.Value = "CM02" Or Cell.Value = "CM07" Or Cell.Value = "CM35" Then
Cell.Interior.ColorIndex = 6
End If
'Colorie en jaune les cellule contenant ces critères 2
If Cell.Value = "SJD04" Or Cell.Value = "SJD07" Or Cell.Value = "SJD08" Then
Cell.Interior.ColorIndex = 6
End If

'Colorie en rouge les cellule contenant ces critères 3
If Cell.Value = "CM32" Or Cell.Value = "CM51"
Cell.Interior.ColorIndex = 3
End If
'Colorie en rouge les cellule contenant ces critères 4
If Cell.Value = "SJD11" Or Cell.Value = "SJD18" Then
Cell.Interior.ColorIndex = 3
End If

Next
Next w

End Sub

Merci d'avance pour les réponses
0
jjsteing Messages postés 1669 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
21 juil. 2009 à 14:41
et la ptite coche résolu ;):p
0