Problème avec une Boucle; VBA

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. Bonjour,

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

    Cordialement,
    1. Salut,
      Range("Di").Select
      Essaye plutôt
      Range("D" & i).Select 
      Non ?
      1. 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.
        1. Contributeur
          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
      2. 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
        1. C'est bon en fait, tout marche très bien, merci pour votre aide.

          Bonne journée.