Macro Excel

Résolu
Bonjour à tous,

Voici ma question ;

Si la cellule de gauche = "Z0" ou "Z1" ou "Z2"
Alors mettre en gris
Puis la ligne du dessous, etc...
Jusqu'à que la cellule = "Total", alors Stop ;)

J'ai commencé à bidouiller avec cette fonction ;

Dim line As Range

For Each line In Range("J18:J65536").Rows
If line.Cells(1, 1).Text = "" Then ActiveCell.Offset(1, 0).Range("A1").Select
Else
If line.Cells(1, 0).Text = "Total" Then Range("A1").Select
End If
End If
Range("A1").Select
Next
End Sub

Je ne peux plus utiliser la mise en forme conditionnelle, car trop lourde dans un TCD et pas propre, cette fonction m'oblige à avoir une colonne masquée que je veux retirer.

Merci beaucoup
Configuration: Windows Vista
Internet Explorer 7.0

7 réponses

  1. Bonjour,

    voici un exemple de code :
    Sub test()
    Dim Ligne, Gris, AGriser
    Gris = 12632256
    AGriser = False

    For Ligne = 18 To 65536
    If Cells(Ligne, 1) = "Z0" Or Cells(Ligne, 1) = "Z1" Or Cells(Ligne, 1) = "Z2" Then AGriser = True
    If Cells(Ligne, 1) = "Total" Then Exit For
    If AGriser Then Cells(Ligne, 2).Interior.Color = Gris
    Next Ligne
    Range("A1").Select
    End Sub

    Dans cet exemple, je descends dans la colonne A (cells(ligne,1) mais il suffit de changer 1 pour une autre colonne)
    Dès que Z0, Z1 ou Z2 est trouvé, il faut griser donc AGriser = vrai
    Quand Total, arrêt direct sans griser. S'il faut griser, la ligne doit être après "If AGriser Then Cells(Ligne, 2).Interior.Color = Gris".

    S'il y a une autre valeur entre le Z. et Total, cela sera grisé également car selon ta demande on grise dès la rencontre de Z. jusqu'à Total. Mais on peut faire autrement.

    Bonne continuation

    Leplot
    0
    1. Merci Leplot, je vais tester :)
      0
      1. "S'il y a une autre valeur entre le Z. et Total, cela sera grisé également car selon ta demande on grise dès la rencontre de Z. jusqu'à Total. Mais on peut faire autrement."

        Après teste oui parfois le gris ne doit pas continuer, il y à des coupures, car d'autres codes.

        Il faut placer "Else" ? mais ou :)

        Merci
        0
        1. Bonjour,

          Sub test()
          Dim Ligne, Gris, AGriser
          Gris = 12632256
          AGriser = False
          For Ligne = 18 To 65536
          If AGriser = True And Cells(Ligne, 1) <> "" Then AGriser = False
          If Cells(Ligne, 1) = "Z0" Or Cells(Ligne, 1) = "Z1" Or Cells(Ligne, 1) = "Z2" Then AGriser = True
          If Cells(Ligne, 1) = "Total" Then Exit For
          If AGriser Then Cells(Ligne, 2).Interior.Color = Gris
          Next Ligne
          Range("A1").Select
          End Sub

          La ligne après le for teste si on est en train de griser et s'il faut continuer (arrêt si cellule non vide)

          LePlot
          0
          1. Super, merci encore.

            J'ai testé, sa fonctionne, j'ai du retirer le fusionnage des étiquettes du TCD. Par contre je n'arrive pas à mettre en gras, il faut rajouter une ligne ? la vitesse est surprenante :)

            Mon autre problème c que certain on excel en anglais à la fin du TCD j'ai "Total" ou "Grand Total" ; si(droite(colonne(-1);5)="Total" c faisable ? pour stopper.
            0
            1. Salut
              Sub test()
              Dim Ligne, Gris, AGriser
              Gris = 12632256
              AGriser = False
              For Ligne = 18 To 65536
              If AGriser = True And Cells(Ligne, 1) <> "" Then AGriser = False
              If Cells(Ligne, 1) = "Z0" Or Cells(Ligne, 1) = "Z1" Or Cells(Ligne, 1) = "Z2" Then AGriser = True
              If Right(Cells(Ligne, 1), 5) = "Total" Then Exit For
              If AGriser Then
              Cells(Ligne, 2).Interior.Color = Gris
              Cells(Ligne, 2).Font.Bold = True
              Else
              Cells(Ligne, 2).Interior.ColorIndex = xlNone
              Cells(Ligne, 2).Font.Bold = False
              End If
              Next Ligne
              Range("A1").Select
              End Sub

              J'ai modifié le test sur total comme tu le proposes (right).
              Si les textes sont différents, tu pourrais également mettre plusieurs tests :
              If Cells(Ligne, 1) = "Total" or Cells(Ligne, 1) = "Somme" Then Exit For

              J'ai ajouté la mise en gras (.font.bold) et la suppression du gris et du gras si ce n'est pas utile (si les données changent)

              Bon week-end

              LePlot
              0
              1. Merci Leplot, je devrais y arriver grace a ton aide ;)
                0