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

  1. eljojo_e Messages postés 1255 Statut Membre 155
     
    Bonjour,

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

    Cordialement,
    0
  2. Morgothal Messages postés 1350 Statut Membre 184
     
    Salut,
    Range("Di").Select
    Essaye plutôt
    Range("D" & i).Select 
    Non ?
    0
  3. 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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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

    Bonne journée.
    0