Macro Excel
Résolu/Fermé
Gaetan95800
Messages postés
10
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
7 juin 2009
-
18 mars 2009 à 23:05
Gaetan95800 Messages postés 10 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 7 juin 2009 - 25 mars 2009 à 15:29
Gaetan95800 Messages postés 10 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 7 juin 2009 - 25 mars 2009 à 15:29
A voir également:
- Macro Excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
7 réponses
leplot
Messages postés
191
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
13 août 2015
131
19 mars 2009 à 11:53
19 mars 2009 à 11:53
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
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
Gaetan95800
Messages postés
10
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
7 juin 2009
19 mars 2009 à 14:08
19 mars 2009 à 14:08
Merci Leplot, je vais tester :)
Gaetan95800
Messages postés
10
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
7 juin 2009
19 mars 2009 à 15:06
19 mars 2009 à 15:06
"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
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
leplot
Messages postés
191
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
13 août 2015
131
20 mars 2009 à 09:51
20 mars 2009 à 09:51
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Gaetan95800
Messages postés
10
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
7 juin 2009
20 mars 2009 à 15:20
20 mars 2009 à 15:20
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.
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.
leplot
Messages postés
191
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
13 août 2015
131
20 mars 2009 à 17:57
20 mars 2009 à 17:57
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
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
Gaetan95800
Messages postés
10
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
7 juin 2009
25 mars 2009 à 15:29
25 mars 2009 à 15:29
Merci Leplot, je devrais y arriver grace a ton aide ;)