Problème avec une Boucle; VBA

EdouardAUREL -  
 EdouardAUREL -
Bonjour, j'ai actuellement un problème avec une boucle toute simple normalement. Voici mon code :

Private Sub formule()

Dim i As Integer

For i = 9 To 3000
Range("Di").Select
ActiveCell.FormulaR1C1 = _
"=IF('INFOS CLIENTS'!RiC15="""","""",IF(AND(RiC15<21,OR('SYNTHESE RELANCE'!RiC11=""NO"",'SYNTHESE RELANCE'!RiC11="""")),""EN COURS"",IF('SYNTHESE RELANCE'!RiC11=""YES"",""AUTORISEE"",IF(AND(RiC15>21,OR('SYNTHESE RELANCE'!RiC11=""NO"",'SYNTHESE RELANCE'!RiC11="""")),""PENDING"",""""))))"

Next i

End Sub

Lorsque je lance mon code, celui me me renvoie "Run-Time error 1004", ceci est d'autant plus surprenant que ce code marche très bien sur une cellue, par exemple, si je veux écrire cette formule dans D9, le code suivant fonctionne très bien :

Private Sub formule()

Range("D9").Select
ActiveCell.FormulaR1C1 = _
"=IF('INFOS CLIENTS'!R9C15="""","""",IF(AND(R9C15<21,OR('SYNTHESE RELANCE'!R9C11=""NO"",'SYNTHESE RELANCE'!R9C11="""")),""EN COURS"",IF('SYNTHESE RELANCE'!R9C11=""YES"",""AUTORISEE"",IF(AND(R9C15>21,OR('SYNTHESE RELANCE'!R9C11=""NO"",'SYNTHESE RELANCE'!R9C11="""")),""PENDING"",""""))))"

End Sub

Avez-vous une idée?

Merci.

5 réponses

eljojo_e Messages postés 1155 Date d'inscription   Statut Membre Dernière intervention   154
 
Bonjour,


Range("Di").Select ne peux pas marcher. il faut mettre Range("D" & i).Select

Cordialement,
0
Morgothal Messages postés 1236 Date d'inscription   Statut Membre Dernière intervention   183
 
Salut,
Range("Di").Select
Essaye plutôt
Range("D" & i).Select 
Non ?
0
EdouardAUREL
 
Bonjour le problème venait bien de là, merci mais ça ne marche pas. En fait, je voudrais copier cette formule sur excel :

=IF('INFOS CLIENTS'!$O$9="";"";IF(AND($O$9<21;OR('SYNTHESE RELANCE'!$K$9="NO";'SYNTHESE RELANCE'!$K$9=""));"EN COURS";IF('SYNTHESE RELANCE'!$K$9="YES";"AUTORISEE";IF(AND($O$9>21;OR('SYNTHESE RELANCE'!$K$9="NO";'SYNTHESE RELANCE'!$K$9=""));"PENDING";""))))

sur toutes mes lignes de 9 a 3000 de ma colonne D (et je ne peux pas utiliser $D9 car après une fonction VBA me colle mes cellules sur d'autres feuille et me changent donc la valeur). Cependant avec ma formule précédente :

Private sub Formule ()

Dim i As Integer
For i = 9 To 3000
Range("Di").Select
ActiveCell.FormulaR1C1 = _
"=IF('INFOS CLIENTS'!RiC15="""","""",IF(AND(RiC15<21,OR('SYNTHESE RELANCE'!RiC11=""NO"",'SYNTHESE RELANCE'!RiC11="""")),""EN COURS"",IF('SYNTHESE RELANCE'!RiC11=""YES"",""AUTORISEE"",IF(AND(RiC15>21,OR('SYNTHESE RELANCE'!RiC11=""NO"",'SYNTHESE RELANCE'!RiC11="""")),""PENDING"",""""))))"
Next i

End Sub

ça ne marche pas, ça me colle une mauvaise formule sans $D$9, $D$10... ça me garde les i enfin c'est tout faux.

Savez-vous comment faire ?

Merci.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Bonsoir,

Ils sont déjà 2 à t'avoir donné la réponse...

Applique le même principe :
remplace :
....AND(RiC15<21...
par :
...AND(R" & i & "C15<21...

partout où tu utilises i

eric
0
EdouardAUREL
 
OK, merci éric, un des problèmes venait de là, la macro suivante tourne bien :

Private Sub formule()

Dim i As Integer

For i = 9 To 3000
Range("D" & i).Select
ActiveCell.FormulaR1C1 = _
"=IF('INFOS CLIENTS'!R" & i & "C15="""","""",IF(AND(R" & i & "C15<21,OR('SYNTHESE RELANCE'!R" & i & "C11=""NO"",'SYNTHESE RELANCE'!R" & i & "C11="""")),""EN COURS"",IF('SYNTHESE RELANCE'!R" & i & "C11=""YES"",""AUTORISEE"",IF(AND(R" & i & "C15>21,OR('SYNTHESE RELANCE'!R" & i & "C11=""NO"",'SYNTHESE RELANCE'!R" & i & "C11="""")),""PENDING"",""""))))"


Next i

End Sub

Cependant toujours un problème, elle me copie la formule dans toutes les cases mais avec un dollar juste devant la lettre et non devant la lettre comme je le souhaiterais. En résumé, au lieu de me copier ceci :

IF('INFOS CLIENTS'!$O$9="";"";IF(AND($O$9<21;OR('SYNTHESE RELANCE'!$K$9="NO";'SYNTHESE RELANCE'!$K$9=""));"EN COURS";IF('SYNTHESE RELANCE'!$K$9="YES";"AUTORISEE";IF(AND($O$9>21;OR('SYNTHESE RELANCE'!$K$9="NO";'SYNTHESE RELANCE'!$K$9=""));"PENDING";""))))

Elle me colle ceci :
IF('INFOS CLIENTS'!$O9="";"";IF(AND($O9<21;OR('SYNTHESE RELANCE'!$K9="NO";'SYNTHESE RELANCE'!$K9=""));"EN COURS";IF('SYNTHESE RELANCE'!$K9="YES";"AUTORISEE";IF(AND($O9>21;OR('SYNTHESE RELANCE'!$K9="NO";'SYNTHESE RELANCE'!$K9=""));"PENDING";""))))

Merci d'avance si vous avez une idée, bonne journée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
EdouardAUREL
 
C'est bon en fait, tout marche très bien, merci pour votre aide.

Bonne journée.
0