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

morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   -  
jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   -
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...
Configuration: Windows XP Internet Explorer 7.0

4 réponses

  1. le père
     
    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
    1. mayoyo
       
      Génial el padre! Ca fonctionne! Je m'étais en effet mélangée les pinceaux...
      Merci pour ton aide ;-)
      0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  3. mayoyo
     
    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
  4. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
     
    et la ptite coche résolu ;):p
    0