Problème boucle qui ne fonctionne pas

Bonjour,

J'ai besoin d'aide sur une boucle qui ne fonctionne pas.

J'ai une première macro qui fonctionne, et je souhaiterai la rendre plus simple à gérer, car je dois la transposer sur un fichier avec 365 colonnes...

image

ce qui donne la formule ci-dessous dans les cellules Excel concernées

image

Je l'ai transformé en une boucle (enfin, j'ai essayé ):

mais dans la formule, il ne remplace pas "numero" par un chiffre

image

Voici la formule Excel qui se trouve dans la case correspondante

image

Merci d'avance pour votre aide.

Zazame

Bonjour,

Il faut sortir la variable VBA numéro de la chaîne de caractères de la formule. Avant numéro mettre un guillemet de fin de chaîne " puis le ET d'imprimerie & puis la variable augmentée de 2 puis un ET d'imprimerie & et on réouvre la chaîne de caractères avec un guillemets :

"La chaîne de caractères " & numéro + 2 & " La suite de la chaîne "

@ bientôt

LouReeD

Merci pour ta réponse, mais désolée, je ne la comprends pas.

Où mets-tu la chaine de caractères ? et que mets-tu du coup dans la boucle ?

Merci d'avance pour ton aide.

Dim numero As Integer
For numero = 2 To 15
Cells(2, numero).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC1,absences!C1:C200,numero(+2),FALSE)=""""),IF('données de base initial'!RC="""","""",'données de base initial'!RC),IF(VLOOKUP('données de base'!RC1,absences!C1:C200,numero(+2),FALSE)="""",IF('données de base initial'!RC="""","""",'données de base initial'!RC),VLOOKUP('données de base initial'!RC1,absences!C1:C200,numero(+2),FALSE)))"
Next

ceci est la chaine de caractère : "=IF(ISERROR(VLOOKUP(RC1,absences!C1:C200,numero(+2),FALSE)=""""),IF('données de base initial'!RC="""","""",'données de base initial'!RC),IF(VLOOKUP('données de base'!RC1,absences!C1:C200,numero(+2),FALSE)="""",IF('données de base initial'!RC="""","""",'données de base initial'!RC),VLOOKUP('données de base initial'!RC1,absences!C1:C200,numero(+2),FALSE)))"

Avant numéro ajouter "& et après numéro+2 ajouter &" ce qui donne :
"=IF(ISERROR(VLOOKUP(RC1,absences!C1:C200, &numero+2&",FALSE)=""""),IF('données de base initial'!RC="""","""",'données de base initial'!RC),IF(VLOOKUP('données de base'!RC1,absences!C1:C200,"&numero+2&",FALSE)="""",IF('données de base initial'!RC="""","""",'données de base initial'!RC),VLOOKUP('données de base initial'!RC1,absences!C1:C200,"&numero+2&",FALSE)))"

@ bientôt

LouReeD

Bonjour LouReed,

Merci pour ton aide.

Il doit y avoir encore un soucis sur cette formule, car j'ai le droit (et c'est nouveau) à :

image

Cordialement.

Zazame

bonjour ZAZAME,

vous n'avez pas le fichier pour essayer ?

Bonjour BsAlv,

J'ai créer un fichier "test" ci joint.

J'ai donc un soucis entre la macro "MAJ_donneesDeBaseAvecAbsence" et la macro "test".

La macro "MAJ_donneesDeBaseAvecAbsence" fonctionne. Elle prend bien en compte mes données, et les copies pour chaque colonne.

La macro "test" ne fonctionne pas, alors qu'elle est seulement sensée être la boucle de la première macro. Je doit transposée ces macros pour créer un plan de charge annuel, et recopier 4 lignes de code par colonne (1 an = 365 colonnes) ne me fait pas rêver, sans compter le risque d'erreur...

Merci de votre aide.

Bonsoir,

si la ligne mise en commentaire, qui se trouve être rouge lorsque l'on enlève les apostrophe est celle qui intègre ma proposition, sachez qu'un guillemet " est différent d'une apostrophe '
Je vous propose cette correction :

'créer les variables pour la boucle
Dim numero As Integer
For numero = 4 To 17

Cells(2, numero - 2).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC1,absences!C1:C200," & numero & ",FALSE)=""""),IF('données de base initial'!RC="""","""",'données de base initial'!RC),IF(VLOOKUP('données de base'!RC1,absences!C1:C200," & numero & ",FALSE)="""",IF('données de base initial'!RC="""","""",'données de base initial'!RC),VLOOKUP('données de base initial'!RC1,absences!C1:C200," & numero & ",FALSE)))"

Next

Pour une meilleur lecture et une bonne prise en compte par VBA il est préférable d'ajouter des espace de chaque côté du & lors de la fermeture et ouverture de la chaine de caractère autour de la variable VBA.

@ bientôt

LouReeD

bonjour LouReeD, ZAZAME,

à peu prêt la même solution que LouReeD

s = "=IF(ISERROR(VLOOKUP(RC1,absences!C1:C200,@,FALSE)=""""),IF('données de base initial'!RC="""","""",'données de base initial'!RC),IF(VLOOKUP('données de base'!RC1,absences!C1:C200,@,FALSE)="""",IF('données de base initial'!RC="""","""",'données de base initial'!RC),VLOOKUP('données de base initial'!RC1,absences!C1:C200,@,FALSE)))"
     With Sheets("données de base")
          For numero = 4 To 17
               .Cells(2, numero - 2).Resize(99).FormulaR1C1 = Replace(s, "@", numero)
          Next
     End With

Donc la formule est un string et on remplace le "@" par une valeur. Je vois que vous utilisez excel365, alors c'est mieux d'utiliser "RECHERCHEX" au lieu de "VLOOKUP" parce qu'il est beaucoup plus performant, important quand vous utilisez cela sur 100 lignes * 365 colonnes !!!

Bonjour,

Et un grand merci à tous les 2.

Bonjour Zezame,

Pour l'avenir merci d'éviter de dupliquer les fils. Cela évite notamment de faire perdre le temps aux personnes qui se penche sur votre souci alors que vous avez déjà reçu une réponse ailleurs.

fil --> https://forum.excel-pratique.com/s/goto/1181315

Si vous n'avez pas de réponse à votre demande, il vous suffit de cliquer sur "répondre" pour créer un nouveau post sur votre fil ouvert.

Crdlt

Bonjour Dan,

C'est noté. Je vous prie d'accepter mes excuses.

Cordialement.

Bonjour,

La réponse etait donnée mercredi, mais elle etait sous la forme : je vous apprend à pêcher, je ne fourni pas le poisson...

Après je ne pense pas avoir perdu du temps puisque j'ai informé qu'une apostrophe était différente d'un guillemet !

Le principal c'est que tout fonctionne.

@ bientôt

LouReeD

Bonjour,

Et encore merci pour vos réponses.

J'ai un autre soucis, surtout lors de ma transposition vers mes fichiers. Je me suis aperçue que seule la première ligne des absences pour chaque nom est prise en compte.

Avez-vous une solution ? car là, je ne sais pas...

Merci d'avance.

Bonjour

Mieux vaut ouvrir un nouveau sujet, il me semble que c'est un problème différent...

@ bientôt

LouReeD

Rechercher des sujets similaires à "probleme boucle qui fonctionne pas"