Problème pour faire fonctionner une boucle For/If
Résolu/Fermé
lauraSoe
Messages postés
29
Date d'inscription
mercredi 25 juin 2014
Statut
Membre
Dernière intervention
10 juillet 2014
-
25 juin 2014 à 11:24
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 27 juin 2014 à 10:00
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 27 juin 2014 à 10:00
A voir également:
- Problème pour faire fonctionner une boucle For/If
- Comment faire fonctionner chromecast - Guide
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Download instagram for pc - Télécharger - Divers Communication
- Saveaspdf.exe for office 2007 - Télécharger - Bureautique
4 réponses
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
25 juin 2014 à 11:32
25 juin 2014 à 11:32
Bonjour,
Le problème vient de la syntaxe de tes If :
Le problème vient de la syntaxe de tes If :
If Bi = Ej = True Thenn'est pas correct. Il faut faire :
If Bi = Ej Then. Si la condition est vraie Alors il exécute le code jusqu'à la fin du If.
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
25 juin 2014 à 12:01
25 juin 2014 à 12:01
C'est surtout la boucle qui déconne je pense.
Non, tu n'as pas bien lu mon post ... j'avais pourtant dit : syntaxe de tes If .
Tu as modifié le premier If mais pas le 2ème ...
Il faut faire:
Si Bi = Ej Alors fait
' ... le code qui va bien si la condition est vraie
Sinon fait
' ... le code qui va bien si la condition est fausse
Fin Si
Tu peux également supprimer tous les
Non, tu n'as pas bien lu mon post ... j'avais pourtant dit : syntaxe de tes If .
Tu as modifié le premier If mais pas le 2ème ...
Il faut faire:
Si Bi = Ej Alors fait
' ... le code qui va bien si la condition est vraie
Sinon fait
' ... le code qui va bien si la condition est fausse
Fin Si
Tu peux également supprimer tous les
ActiveWindow.ScrollColumnqui ne servent à rien.
lauraSoe
Messages postés
29
Date d'inscription
mercredi 25 juin 2014
Statut
Membre
Dernière intervention
10 juillet 2014
25 juin 2014 à 13:21
25 juin 2014 à 13:21
Hum... Voilà j'ai corrigé comme vous avez dit, mais c'est toujours pareil "Erreur de compilation: else sans bloc If".
Dim i As Byte
Dim j As Byte
Dim derlig As Integer
derlig = Sheets("MACRO").Range("E65536").End(xlUp).Row
derlig2 = Sheets("MACRO").Range("B65536").End(xlUp).Row
For j = 2 To derlig
If Bi = Ej Then Range("Fi").Select
Selection.Copy
Range("C(i+1)").Select
ActiveSheet.Paste
Else: Range("Ej:Fj").Select
Selection.Copy
Range("derlig2").Select
ActiveSheet.Paste
End If
Dim i As Byte
Dim j As Byte
Dim derlig As Integer
derlig = Sheets("MACRO").Range("E65536").End(xlUp).Row
derlig2 = Sheets("MACRO").Range("B65536").End(xlUp).Row
For j = 2 To derlig
If Bi = Ej Then Range("Fi").Select
Selection.Copy
Range("C(i+1)").Select
ActiveSheet.Paste
Else: Range("Ej:Fj").Select
Selection.Copy
Range("derlig2").Select
ActiveSheet.Paste
End If
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
25 juin 2014 à 13:27
25 juin 2014 à 13:27
Il y a des erreurs de syntaxe ...
Que sont Bi et Ej ? Des cellules ? Si oui
Que sont Bi et Ej ? Des cellules ? Si oui
If Range("B" & i).Value = Range("E" & j).Value Then Range("F" & i).Copy Destination:=Range("C" & i +1) Else Range("E" & j & ":F" & j).Copy Destination:=Range("B" & derlig2) End If
lauraSoe
Messages postés
29
Date d'inscription
mercredi 25 juin 2014
Statut
Membre
Dernière intervention
10 juillet 2014
25 juin 2014 à 13:48
25 juin 2014 à 13:48
Oui ce sont des cellules, merci!
Alors j'ai remplacé, et il y avait un problème "Methode Range de l'objet global a échoué"
J'ai cherché , apparemment ça vient qu'on a pas précisé où on le fait du coup j'ai rajouté Worksheet. avant le Range.
maintenant nouveau truc, ils marquent erreur 424 objet requis. Je pas comment on peut solutionner le problème...
(J'ai vraiment du mal, désolé et merci de votre patience :) )
Alors j'ai remplacé, et il y avait un problème "Methode Range de l'objet global a échoué"
J'ai cherché , apparemment ça vient qu'on a pas précisé où on le fait du coup j'ai rajouté Worksheet. avant le Range.
maintenant nouveau truc, ils marquent erreur 424 objet requis. Je pas comment on peut solutionner le problème...
(J'ai vraiment du mal, désolé et merci de votre patience :) )
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
25 juin 2014 à 14:04
25 juin 2014 à 14:04
Il faut s'assurer que i soit initialisé ... je ne vois pas dans ton code où i est initialisé. Il a donc la valeur de 0 !!! la ligne 0 n'existe pas dans Excel ...
Ensuite il faut mettre, si l'on n'est pas sur la feuille concernée quand on lance la macro:
Worksheets("MACRO").Range( ... etc
Ensuite il faut mettre, si l'on n'est pas sur la feuille concernée quand on lance la macro:
Worksheets("MACRO").Range( ... etc
lauraSoe
Messages postés
29
Date d'inscription
mercredi 25 juin 2014
Statut
Membre
Dernière intervention
10 juillet 2014
25 juin 2014 à 15:47
25 juin 2014 à 15:47
J'ai initialisé je pense, ça donne ça?
Enfin du coup au niveau du débogage ça marche, mais quand j'exécute la macro ça marche pas (désespoir total)
ça a pas copier les éléments de E sur la colonne C ni même les dates manquantes...
Dim i As Integer
Dim j As Integer
Dim derlig As Integer
derlig = Sheets("MACRO").Range("E65536").End(xlUp).Row
derlig2 = Sheets("MACRO").Range("B65536").End(xlUp).Row
i = 2
For j = 2 To derlig
If Range("B" & i).Value = Range("E" & j).Value Then
Range("F" & i).Copy Destination:=Range("C" & i + 1)
Else
Range("E" & j & ":F" & j).Copy Destination:=Range("B" & derlig2)
End If
Enfin du coup au niveau du débogage ça marche, mais quand j'exécute la macro ça marche pas (désespoir total)
ça a pas copier les éléments de E sur la colonne C ni même les dates manquantes...
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
25 juin 2014 à 16:07
25 juin 2014 à 16:07
Tu dis : ça a pas copier les éléments de E sur la colonne C
A aucun moment tu demandes de le faire dans le code !!!
Moi je lis :
Si ma cellule Bx est égale à Ey Alors je copie la cellule Fx dans la cellule C x+1 Sinon je copie la plage de cellule Ey:Fy sur la dernière ligne de la colonne B.
Pourquoi mettre i en variable si on copie toujours la cellule "F2" pour la copier en "C3" ??? Ne manque-t-il pas une incrémentation de i ?
A aucun moment tu demandes de le faire dans le code !!!
Moi je lis :
Si ma cellule Bx est égale à Ey Alors je copie la cellule Fx dans la cellule C x+1 Sinon je copie la plage de cellule Ey:Fy sur la dernière ligne de la colonne B.
Pourquoi mettre i en variable si on copie toujours la cellule "F2" pour la copier en "C3" ??? Ne manque-t-il pas une incrémentation de i ?
lauraSoe
Messages postés
29
Date d'inscription
mercredi 25 juin 2014
Statut
Membre
Dernière intervention
10 juillet 2014
25 juin 2014 à 16:14
25 juin 2014 à 16:14
Oh pardon excusez-moi, je voulais dire les éléments de F dans la colonne C !!
Ce que je veux faire c'est si Bx=Ey alors je copie Fy sur Cx
Bx différent de Ey alors je copie Ey et Fy sur la première ligne non vide.
Et en faite je ne comprends pas votre histoire incrémentation de i ...
Ce que je veux faire c'est si Bx=Ey alors je copie Fy sur Cx
Bx différent de Ey alors je copie Ey et Fy sur la première ligne non vide.
Et en faite je ne comprends pas votre histoire incrémentation de i ...
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
25 juin 2014 à 15:05
25 juin 2014 à 15:05
Bonjour,
excusez l'incruste
Excuses moi Polux, je n'avais pas rafraichi
si résolu le problème du compteur "i"
j'aurais écrit
remarque: supprimer tous les
ActiveWindow.ScrollColumn=xxx inutiles et ralentisseurs de la macro
excusez l'incruste
Excuses moi Polux, je n'avais pas rafraichi
si résolu le problème du compteur "i"
j'aurais écrit
Dim i As Integer, j As Integer
Dim Derlig As Integer, Ligvide As Integer
Application.ScreenUpdating = False
With Sheets("MACRO")
Derlig = .Range("E65536").End(xlUp).Row
For j = 3 To Derlig
If .Range("B" & i) = .Range("E" & j) Then
.Range("C" & i + 1) = .Range("F" & i).Value
Else
Ligvide = .Range("B65536").End(xlUp).Row + 1
.Cells(Ligvide, "B").Resize(1, 2) = .Range(.Cells(j, "E"), .Cells(j, "E")).Value
End If
End With
Next
remarque: supprimer tous les
ActiveWindow.ScrollColumn=xxx inutiles et ralentisseurs de la macro
lauraSoe
Messages postés
29
Date d'inscription
mercredi 25 juin 2014
Statut
Membre
Dernière intervention
10 juillet 2014
25 juin 2014 à 15:51
25 juin 2014 à 15:51
Bonjour michel_m, merci de m'aider
j'ai inséré votre idée pour voir si ça marchait mais ça marche pas! un problème avec le with.
Mais aussi est-ce que vous pouvez m'expliquer pourquoi vous avez mit "with" s'il vous plait?
Merci beaucoup de votre aide.
j'ai inséré votre idée pour voir si ça marchait mais ça marche pas! un problème avec le with.
Mais aussi est-ce que vous pouvez m'expliquer pourquoi vous avez mit "with" s'il vous plait?
Merci beaucoup de votre aide.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
25 juin 2014 à 17:32
25 juin 2014 à 17:32
With Sheets("MACRO")
Derlig = .Range("E65536").End(xlUp).Row
For j = 3 To Derlig
If .Range("B" & i) = .Range("E" & j) Then
.Range("C" & i + 1) = .Range("F" & i).Value
Else
Ligvide = .Range("B65536").End(xlUp).Row + 1
.Cells(Ligvide, "B").Resize(1, 2) = .Range(.Cells(j, "E"), .Cells(j, "E")).Value
End If
Next
End With
Comme je n'ai pas pu tester j'ai fais un bug excuse moi
With........end with
Ce la s'appelle un bloc, cad que entre le début et la fin du bloc tout ce qui précédé du point appartient au bloc, per ex:
With sheets("macro"):
tu peux voir que toutes les cellules de de la feuille sont précédés d'un point; c'est l'équivalent de sheets("macro").range("machin")
L'avantage est une écriture + claire, une fiabilité du traitement
Avec wirth sheets("truc") tu n'as plus besoin de faire des "select" ou "activate" toujours très lents
(les select-selection sont à éviter en VBA)
un tuto très complet mais qui ne se lit pas comme un roman policier:
https://bidou.developpez.com/article/VBA/
cela te permettra de passer de l'enregistreur de macros au VBA
Derlig = .Range("E65536").End(xlUp).Row
For j = 3 To Derlig
If .Range("B" & i) = .Range("E" & j) Then
.Range("C" & i + 1) = .Range("F" & i).Value
Else
Ligvide = .Range("B65536").End(xlUp).Row + 1
.Cells(Ligvide, "B").Resize(1, 2) = .Range(.Cells(j, "E"), .Cells(j, "E")).Value
End If
Next
End With
Comme je n'ai pas pu tester j'ai fais un bug excuse moi
With........end with
Ce la s'appelle un bloc, cad que entre le début et la fin du bloc tout ce qui précédé du point appartient au bloc, per ex:
With sheets("macro"):
tu peux voir que toutes les cellules de de la feuille sont précédés d'un point; c'est l'équivalent de sheets("macro").range("machin")
L'avantage est une écriture + claire, une fiabilité du traitement
Avec wirth sheets("truc") tu n'as plus besoin de faire des "select" ou "activate" toujours très lents
(les select-selection sont à éviter en VBA)
un tuto très complet mais qui ne se lit pas comme un roman policier:
https://bidou.developpez.com/article/VBA/
cela te permettra de passer de l'enregistreur de macros au VBA
lauraSoe
Messages postés
29
Date d'inscription
mercredi 25 juin 2014
Statut
Membre
Dernière intervention
10 juillet 2014
26 juin 2014 à 08:46
26 juin 2014 à 08:46
Okay, ça ressemble pas mal a ce qu'a écrit polux! ça veut dire qu'on est sur la bonne voix!
Ils marquent qu'il y a un problème: "End with sans with"
Merci beaucoup pour l'explication!
Ils marquent qu'il y a un problème: "End with sans with"
Merci beaucoup pour l'explication!
25 juin 2014 à 11:41
Je viens de corriger le problème maintenant ils marquent: Erreur de compilation: End if sans bloc If.
j'ai regardé dans d'autres post mais j'ai toujours pas compris ce que ça voulait dire :/
25 juin 2014 à 11:45
25 juin 2014 à 11:48
C'est surtout la boucle qui déconne je pense.
Merci.