bonjour,
j'utilise office 2003, et j'ai un probleme dans ma macro avec la boucle for:
j'ai une erreur qui resort ("erreur de compilation: next sans for")
pourtant le for existe.
merci d'avance
bonjour,
j'utilise office 2003, et j'ai un probleme dans ma macro avec la boucle for:
j'ai une erreur qui resort ("erreur de compilation: next sans for")
pourtant le for existe.
merci d'avance
Salut,
tu dois avoir un If (ou autre...) non fermée à l'intérieur de ta boucle entre For et Next
bon pour ce bleme c'est resolu
là j'en ai un autre, avec l'erreur suivante ("erreur d'execussion '424': objet requis")
bon voila le code macro que j'ai ecris , qui sert a travers des regles de gestion de tester si une cellule est renseignée ou non, si non on colore le contenu de la cellule Bi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 Sub renseigner() 'définition d'une cellule Dim cel As Range Dim contenu As String contenu = CreateObject("Excel.Application") Dim ligne As String ligne = CreateObject("Excel.Application") Dim dev As Double 'dev = CreateObject("Excel.Application") Dim numero As String numero = CreateObject("Excel.Application") 'declaration d'une var pour le debut de la boucle 'Dim debut As Range 'debut = Range("F" & 1).Select 'declaration d'une var pour la fin de la boucle 'Dim fin As Range 'fin = Range("F" & 171).Select '---------------boucle pour tester si devis de développement doit etre reinseigner ou non----------------- For Each cel In Range("F" & 1).EntireColumn 'mettre le contenu de la cellule dans la var contenu contenu = Active.Range.Formula 'comparaison entre contenu et la chaine de caractere "Evo" If contenu Like "Evo" Then GoTo Test End If Next cel '---------teste sur les regles de gestion------------ Test: ligne = Range("T1:T171").Formula 'dev = Range("AG1:AG171").Formula ------ 'deplacer dans le corps du code avant son test 'condition sur la difference avec Check-in If ligne <> "CHK" Then 'condition sur la difference avec Check-in OK If ligne <> "CHK-OK" Then 'condition sur la difference avec ANA If ligne <> "ANA" Then 'condition sur la difference avec ANU If ligne <> "ANU" Then 'condition sur la difference avec ATT If ligne <> "ATT" Then 'verifier si devis developpement est mal renseigné dev = Range("AG1:AG171").Formula If dev Like " " Then numero = Range("B1:B171").Formula.Select Selection.Font.ColorIndex = 12 End If End If End If End If End If End If End Sub
N'oublie pas de mettre ton code entre 2 balises de CODE, sinon c'est illisible.
Avant de continuer, faut que tu m'expliques qu'est-ce que c'est que ces CreateObject("Excel.Application") que tu nous a collé partout au début...
PS: salut godz.
T'es pas très courageux aujourd'hui non?![]()
bein vraiment je ne sais pas ou il se situ, car c la seule chose que je reçois apres la compilation .
merci fouinard pour le next
pour l'autre probleme j'ai enlevé tous les creatOblect mais j'ai toujours le meme probleme et la meme erreur
plutot merci pour le go to loool
le compilateur ne te donne pas une ligne ? ou ne bloque pas sur une lors de l'erreur ?
ensuite je viens de voir, tu peux virer tous tes If et n'en laisser qu'un avec des or entre chaque expression : ligne <> "CHK" OR ligne <> "CHK-OK" OR etc.
ensuite changeen
Code : Sélectionner tout - Visualiser dans une fenêtre à part Range("F" & 1).EntireColumnou alors met cstr(xxx) xxx correspondant à un entier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Range("F1").EntireColumn
Ensuite change ton test :en
Code : Sélectionner tout - Visualiser dans une fenêtre à part If contenu Like "Evo" Thenet
Code : Sélectionner tout - Visualiser dans une fenêtre à part If contenu = "Evo" Thenen
Code : Sélectionner tout - Visualiser dans une fenêtre à part If dev Like " " Then
Code : Sélectionner tout - Visualiser dans une fenêtre à part If dev = " " Then
Salut nsqualli et le forum
Comme j'arrive après le début de la bataille, mes remarques sont sur la macros existante au temps de la réponse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 For Each cel In Range("F" & 1).EntireColumn contenu = Active.Range.Formula If contenu Like "Evo" Then GoTo Test End If Next cel '---------teste sur les regles de gestion------------ Test: ligne = Range("T1:T171").Formula 'dev = Range("AG1:AG171").Formula ------ 'deplacer dans le corps du code avant son test 'condition sur la difference avec Check-in If ligne <> "CHK" Then 'condition sur la difference avec Check-in OK If ligne <> "CHK-OK" Then 'condition sur la difference avec ANA If ligne <> "ANA" Then 'condition sur la difference avec ANU If ligne <> "ANU" Then 'condition sur la difference avec ATT If ligne <> "ATT" Then 'verifier si devis developpement est mal renseigné dev = Range("AG1:AG171").Formula If dev Like " " Then numero = Range("B1:B171").Formula.Select Selection.Font.ColorIndex = 12 End If End If End If End If End If End If End Sub
Bon a tous ceux qui m'ont vraiment aider
le probleme est resolu et voila le code final, si ça peut aider quelqu'un d'autre:
bon courage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Option Explicit Option Compare Text Sub renseigner2() Dim Cel As Range Dim var As Range Const DistF2T As Long = 14 'nombre de décalages pour passer de F à T Const DistF2AG As Long = 27 'nombre de décalages pour passer de F à AG Const DistF2B As Long = -4 'nombre de décalages pour passer de F à B '---------------boucle pour tester si devis de développement doit etre renseigner ou non----------------- For Each Cel In Range("F1:F" & Range("F65000").End(xlUp).Row) 'Si la valeur de la Cel est EVO et la cellule du devis est vide If Cel.Value = "Evo" And Cel.Offset(0, DistF2AG) = "" Then 'Alors, selon le cas de la valeur de la cel de la même ligne, colonne T Select Case Cel.Offset(0, DistF2T).Value 'si l'on a l'une des valeurs suivantes : "CHK", "CHK-OK", "ANA", "ANU", "ATT" Case "CHK", "CHK-OK", "ANA", "ANU", "ATT" 'il n'y a rien à faire 'sinon Case Else 'colorer la Cel correspondante dans la colonne B Cel.Offset(0, DistF2B).Font.Color = vbRed End Select 'si la Cel de la colonne F n'équivaut pas EVO Else 'il n'y a rien à faire non plus End If Next End Sub
Salut nsqualli et le forum
Comme j'arrive après le début de la bataille, mes remarques sont sur la macros existante au temps de la réponse.en le simplifiant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 For Each cel In Range("F" & 1).EntireColumn contenu = Active.Range.Formula If contenu Like "Evo" Then GoTo Test End If Next cel Test:But de cette boucle ? Trouver "Evo", ça, je crois que je comprends, mais... Que tu le trouve ou pas, tu te retrouves après le "next cel". Tu ne mémorises pas la réponse pour la tester, tu ne fais pas un saut pour éviter le reste du traitement ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 For Each cel In Columns(6) If cel = "Evo" Then Exit For Next cel
Quelques Remarques :
La déclaration des variables est effectuée par Excel lors d'un premier passage => sert à rien d'émailler ton code de Dim. Regroupes-les au début de la macro, ça t'évitera des recherches inutiles et rendra ton code plus lisible.
Toujours dans le même esprit de lisibilité (quoique un intervenant disait d'être feignant, alors je met en pratique), évite les ".Formula". Avec du texte ou des valeurs brutes, ça donne le contenu, mais ce que tu cherche est un contenu, pas la formule de la cellule. Donc demande le contenu (.Value) ou rien, parce que value est la propriété par défaut
Tu parcoures toute la colonne F (s'il n'y a pas de bonne réponse). C'est une perte de temps, le micro a autre chose à faire! Comme tu connais la limite :
- soit tu ne testes que la plage concernée et pas les autres cellules (il y a d'autres moyens, mais celle-ci est compréhensible) :- Soit tu testes jusqu'à la dernière cellule non-vide de F
Code : Sélectionner tout - Visualiser dans une fenêtre à part For Each cel In Range([F1],[F171])
Code : Sélectionner tout - Visualiser dans une fenêtre à part For Each cel In Range([F1], [F65536].end(xlup))??? qu'est-ce que tu cherches à faire ??? Comprends pas du tout : tu colles les formules de T1 à T171 dans une variable et tu t'étonnes que tu ais des problèmes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Test: ligne = Range("T1:T171").Formula If ligne <> "CHK" Then ....
Tu fais la même erreur si la variable dev.
Expliques le but de ta macro : on essayera de t'aider.
Si tu débutes, ne commence pas à faire une macro intégrale d'un seul coup. À mon d'être un génie, tu te planteras. Il vaut mieux faire une partie de la macro finale, la tester (avec un point d'arrêt et <F8>) et seulement si la partie fait ce que tu espères, tu continues. Sinon tu dépannes, mais comme c'est une petite partie, c'est plus simple. Après tu en refais un bout, et ainsi de suite.
A+
PS évite de modifier sans arrêt ton poste initial : comment veux-tu t'y retrouver si les postes ne correspondent à rien de ce que tu as dans ta question!
Edit :comme il n'y a pas eu de poste entre temps, je continue sur le même :
Si on a Evo en F et un espace en AG (?) on colorie en rouge le texte de la cellule B
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Option Explicit Option Compare Text Sub renseigner2() Dim Cel As Range For Each Cel In Range([F1], [F65536].End(xlUp)) If Cel = "Evo" And Cells(Cel.Row, "AG") = " " And _ Cells(Cel.Row, "T") <> "CHK" And _ Cells(Cel.Row, "T") <> "CHK-OK" And _ Cells(Cel.Row, "T") <> "ANA" And _ Cells(Cel.Row, "T") <> "ANU" And _ Cells(Cel.Row, "T") <> "ATT" Then Cel.Offset(0, -4).Font.Color = vbRed Next End Sub
Partager