VBA création d'une boucle

Résolu
Jufil -  
 jufil -
Bonjour,

Je débute en VB et j'aimerais créer un code qui automatise la mise en forme d'un fichier Excel.

Concrètement :
Dans la colonne B, j'ai une formule de type =A1=A2 qui me renvoi VRAI ou FAUX selon que les valeurs sont identiques ou non.
A chaque FAUX, j'aimerais que ma ligne se colore en jaune par exemple.
Je sais créer un code pour la 1ère ligne, mais je ne trouve pas la logique pour créer la boucle jusqu'à la fin de mon tableau.

Sub Mise_en_forme()
If Range("C2") = FAUX Then
Rows("2:2").Select
With Selection.Interior
.PatternColorIndex = 1
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Else
End If
End Sub

Pouvez-vous m'aider ?
Merci

10 réponses

  1. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Pourquoi ne pas passer par une mise en forme conditionnelle simplement par excel?

    Sinon tu peux tenter avec un truc du genre

    dim i as integer
    for i=1 to 10 (tableau de ligne 1 à 10)

    If Range("Ci") = FAUX Then
    Rows("i:2").Select
    With Selection.Interior
    .PatternColorIndex = 1
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
    End With
    Else
    End If
    next i
    End Sub
    0
  2. Jufil
     
    Bonjour,

    Merci pour ta réponse rapide !

    C'est une manip' que je fais plusieurs fois par jour en passant par la mise en forme conditionnelle, et j'aimerais l'automatiser, car elle me fait perdre du temps.
    C'est pourquoi j'aimerais créer une macro.

    Concernant ton code, j'ai un message d'erreur qui dit "La méthode 'Range' de l'Objet '_Global' à échoué", du coup j'ai remplacé par cells (3, i)
    --> Là je n'ai pas de message d'erreur, mais rien ne se passe sur mon fichier.

    A quoi cela peut-il être dû ? Est-ce cohérent ?

    Autre question, dans ton code, tu mets Rows("i:2"), c'est plutôt Rows("i:i"), non ?

    Encore merci
    0
  3. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    "c" & i à mettre à la place de ci, autant pour moi
    0
  4. Jufil
     
    Je suis désolée, j'ai encore un message d'erreur :

    Voici le code :

    Sub Mise_en_forme()

    Dim i As Integer
    For i = 1 To 10

    If Range("c" & i) = FAUX Then
    Rows("i:i").Select
    With Selection.Interior
    .PatternColorIndex = 1
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
    End With
    Else
    End If
    Next i
    End Sub

    Le message d'erreur est "Erreur définie par l'objet ou par l'application" sur la ligne "Rows("i:i").Select"

    Qu'est-ce qui cloche ?
    Merci
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Bonjour,

      Pourquoi séléctionner la ligne avec Rows() ???

      If Range("c" & i) = FAUX Then  
          Range("c" & i).Select 
              With Selection.Interior 
                  .PatternColorIndex = 1 
                  .Color = 65535 
                  .TintAndShade = 0 
                  .PatternTintAndShade = 0 
             End With  
      End If


      Le Else est inutile dans le If ... End If

      D'autre part, si ton tableau est susceptible d'avoir des lignes supplémentaires le For ... Next ne bouclera que sur le nombre défini et il faudra intervenir sur le code pour modifier la valeur max.

      Pour être sûr de prendre toujours toutes les lignes sans modifier le code, on recherche la dernière ligne renseignée du tableau.

      Dim DerniereLigne As Integer    
      DerniereLigne = Range("A1").End(xlDown).Row
      
      For i = 1 To DerniereLigne
      If If Range("c" & i) = FAUX Then  
      'etc .... 


      ;o)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Jufil
     
    Bonsoir,

    L'objectif et de colorer toute la ligne et uniquement la cellule.
    Mais je n'arrive pas à sélectionner une ligne sans spécifier le n°.
    Comment puis-je faire ?
    Si je mets Range("i:i").Select, il me colore ma colonne I.
    0
  7. Jufil
     
    J'ai trouvé, il fallait saisir :
    Rows(i & ":" & i).Select

    Merci à tous pour votre aide !
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Ok j'avais mal lu ^^

      Rows(i).Select est suffisant pour sélectionner la ligne entière.

      ;o)
      0
  8. jufil
     
    Re bonjour,
    J'ai essayé d'étendre le code en ajoutant d'autres conditions derrière.

    'Création Variable
    Dim i As Integer
    For i = 1 To 1000

    'Mise en Forme
    If Range("AG" & i) = SUP Then
    Rows(i).Select
    With Selection.Interior
    .ColorIndex = 40
    .Pattern = xlSolid
    .PatternColorIndex = 1
    End With

    Else
    If Range("AG" & i) = PRE Then
    Rows(i).Select
    With Selection.Interior
    .ColorIndex = 39
    .Pattern = xlSolid
    .PatternColorIndex = 1
    End With

    Else
    If Range("AG" & i) = LMT Then
    Rows(i).Select
    With Selection.Interior
    .ColorIndex = 37
    .Pattern = xlSolid
    .PatternColorIndex = 1
    End With

    Else
    If Range("AI" & i) = T Then
    Rows(i).Select
    Selection.Font.Bold = True

    End If
    Next i

    J'ai un message d'erreur qui dit "Next sans For"
    --> Comment se fait-il qu'il ne détecte pas le For ?

    Merci
    0
  9. cousinhub29 Messages postés 1113 Date d'inscription   Statut Membre Dernière intervention   383
     
    Bonjour,

    En VBA, les .Select sont rarement nécessaires...

    Essaie avec ce code :

    Sub essai()
    Dim i As Integer
    For i = 1 To Range("AG65000").End(xlUp).Row
        If Range("AG" & i) = "SUP" Then
            Rows(i).Interior.ColorIndex = 40
        ElseIf Range("AG" & i) = "PRE" Then
            Rows(i).Interior.ColorIndex = 39
        ElseIf Range("AG" & i) = "LMT" Then
            Rows(i).Interior.ColorIndex = 37
        End If
        If Range("AI" & i) = "T" Then
            Rows(i).Font.Bold = True
        End If
    Next i
    End Sub
    


    Bonne journée
    0
  10. jufil
     
    Bonjour cousinhub29?

    C'est vrai que sans les .Select, ça allège le code, merci pour cette info.
    Ton code fonctionne parfaitement, merci beaucoup !
    Bonne journée
    0