Boucle sur une plage de donnees s'arrete apres condition rempli
wuhrlinanthony
Messages postés
57
Statut
Membre
-
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
Désolé pour le titre, ce n'est pas clair car j'ai du mal à expliquer ce que je veux faire.
Je vais essayer de détailler un maximum :
J'ai une liste de plus ou moins 1000 cellules rempli par des chiffres. Je voudrais créer une boucle qui vérifie la première et la dernière cellule sur une plage de 46 cellules. Si la première et la dernière cellule égale 0 alors l'action me surligne la plage de 46 cellules en jaune et la boucle s'arrête. Si non elle continu a tourné.
Et si la boucle ne trouve pas une plage de 46 cellules commençant et finissant par 0, alors la boucle recommence mais avec une plage de 92 cellules (46*2), etc...
Voici mon fichier Excel avec une macro que j'ai essayé mais je ne suis vraiment pas sur :
https://www.cjoint.com/c/FFudxUsFIUz
S'il vous plait, si quelqu'un peut m'aider sur mon fichier et m'expliquer ce qu'il a fait (Pour apprendre en même temps :) ) , ce sera vraiment génial.
Merci beaucoup.
Désolé pour le titre, ce n'est pas clair car j'ai du mal à expliquer ce que je veux faire.
Je vais essayer de détailler un maximum :
J'ai une liste de plus ou moins 1000 cellules rempli par des chiffres. Je voudrais créer une boucle qui vérifie la première et la dernière cellule sur une plage de 46 cellules. Si la première et la dernière cellule égale 0 alors l'action me surligne la plage de 46 cellules en jaune et la boucle s'arrête. Si non elle continu a tourné.
Et si la boucle ne trouve pas une plage de 46 cellules commençant et finissant par 0, alors la boucle recommence mais avec une plage de 92 cellules (46*2), etc...
Voici mon fichier Excel avec une macro que j'ai essayé mais je ne suis vraiment pas sur :
https://www.cjoint.com/c/FFudxUsFIUz
S'il vous plait, si quelqu'un peut m'aider sur mon fichier et m'expliquer ce qu'il a fait (Pour apprendre en même temps :) ) , ce sera vraiment génial.
Merci beaucoup.
1 réponse
-
Bonjour,
Sub color() Dim adr1 As String, c As Range Set c = [B6:B1006].Find(0, LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then adr1 = c.Address Do If c.Offset(46) = 0 And c.Offset(46) <> "" Then c.Resize(46).Interior.ColorIndex = 6 Exit Do End If Set c = Cells.FindNext(c) Loop While c.Address <> adr1 'And Not c Is Nothing End If End Sub
Faire F1 sur les fonctions que tu ne connais pas.
eric
-
Merci Eric pour le code
J'ai essayer "d'agrandir" le code en ajoutant deux autres colonnes :
Sub color()
Dim adr1 As String, bvh As Range, emp As Range, phev As Range
Dim adr2 As String
Dim adr3 As String
Set bvh = [O7:O1006].Find(0, LookIn:=xlValues, lookat:=xlWhole)
Set emp = [P7:P1006].Find(0, LookIn:=xlValues, lookat:=xlWhole)
Set phev = [Q7:Q1006].Find(0, LookIn:=xlValues, lookat:=xlWhole)
If Not bvh Is Nothing Then
adr1 = bvh.Address
adr2 = emp.Address
adr3 = phev.Address
Do
If bvh.Offset(46) = 0 And bvh.Offset(46) <> "" And emp.Offset(46) = 0 And emp.Offset(46) <> "" And phev.Offset(46) = 0 And phev.Offset(46) <> "" Then
bvh.Resize(46).Interior.ColorIndex = 6
emp.Resize(46).Interior.ColorIndex = 6
phev.Resize(46).Interior.ColorIndex = 6
Exit Do
End If
Set bvh = Cells.FindNext(bvh)
Set emp = Cells.FindNext(emp)
Set phev = Cells.FindNext(phev)
Loop While bvh.Address <> adr1 And emp.Address <> adr2 And phev.Address <> adr3 'And Not bvh Is Nothing
End If
End Sub
Je sais, c'est assez simpliste comme ajout, je pense qu'il y a mieux :) . Je suis debutant donc je cherche a faire simple.
Ce qui est bizarre c'est qu'au lieu de me surligner les colonnes O P et Q , le code me surligne les colones R S et T.
Tu sais pourquoi ?
Merci pour ton aide. -
-
Ok je comprends. Je voulais integrer les deux autres colonnes dans les conditions de la boucle If.
Je peux toujours le faire par la suite ou dois-je les integrer au code que tu as fait ?
Une boucle avec les conditions :
premiere et derniere cellule de la plage (46) de la colonne O = 0
+ premiere et derniere cellule de la plage (46) de la colonne P = 0
+ premiere et derniere cellule de la plage (46) de la colonne Q = 0
Si c'est 6 conditions sont respecter, alors le code surligne en couleur la plage de 46 cellules des 3 colonnes.
C'est un peu chiant, c'est pour ca que je ne vois pas tres clair sur ce code.
anthony -
Reste avec un seul .find comme je t'ai mis, seulement le test
If c.Offset(46) = 0 And c.Offset(46) <> "" Then
n'est plus suffisant. Complète-le avec tes conditions supplémentaires.
Regarde l'aide sur Offset. La syntaxe complète est Offset(ligne, colonne)
Ex : .Offset(0,1) te donne le range même ligne, 1 colonne à droite.
-