Autofill d'une FormulaR1C1 mais pas interprétée !!
Akon93
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis bloqué depuis un moment.
J'ai un tableau sur lequel j'écris sur une ligne et dans plusieurs colonnes des formules avec la fonction formulaR1C1.
Ensuite je fais un autofill pour propager les formules sur toutes les lignes du dessous.
Mais quand j'execute ma macro la formule est bien propagée sur toutes les lignes mais seule sur la première ligne la fonction est calculée, sur totues les lignes suivantes ça me donne le résultat de la première ligne alors que la formule est bonne !
J'ai vérifié les formules il n'y a aucune erreur, quand je tape la formule quelque part sur excel ça me donne le bon résultat, mais quand je la recolle dans mon tableau et que je la repropage à la main ça ne me donne le bon résultat que sur la première ligne.
Je ne sais pas si j'ai été clair.
Voici les lignes qui coincent.
For h = 1 To 12
colonne1 = -7 - 4 * (h - 1)
colonne3 = -(largeur2 - 1 + 4 * (h - 12)) + 5
Cells(4, -colonne1).FormulaR1C1 = _
"=SUMPRODUCT((RC[" & colonne1 + 1 & "]='[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C2:R1357C2)*ISNUMBER(SEARCH(RC[" & colonne1 + 5 & "],'[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C4:R1357C4))*'[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C" & labonnecolonne(h) & ":R1357C" & labonnecolonne(h) & ")"
Cells(4, -colonne1).AutoFill Destination:=Range(Cells(4, -colonne1), Cells(taille2, -colonne1)), Type:=xlFillDefault
Next h
j'ai essayé de mettre autre chose que xlFillDefault mais c'est pas mieux
Pour comprendre un peu mieux le code on peut prendre h=1
je veux écrire dans la colonne 7 la formule sumproduct et la propager sur toutes les lignes du dessous.
C'est une rechercheV à deux critères. Dans la colonne 7 je veux regarder la valeur dans la colonne 1 et la comparer à une dans un autre fichier, regarder aussi la colonne 5 et la comparer avec l'autre fichier, et renvoyer la valeur cellule de l'autre fichier qui est à la bonne ligne et bonne colonne. ça marche sur une ligne mais quand on propage ça ne propage que la formule, mais le résultat affiché est celui de la première ligne
Pouvez-vous m'aider ?
merci beaucoup !!
Je suis bloqué depuis un moment.
J'ai un tableau sur lequel j'écris sur une ligne et dans plusieurs colonnes des formules avec la fonction formulaR1C1.
Ensuite je fais un autofill pour propager les formules sur toutes les lignes du dessous.
Mais quand j'execute ma macro la formule est bien propagée sur toutes les lignes mais seule sur la première ligne la fonction est calculée, sur totues les lignes suivantes ça me donne le résultat de la première ligne alors que la formule est bonne !
J'ai vérifié les formules il n'y a aucune erreur, quand je tape la formule quelque part sur excel ça me donne le bon résultat, mais quand je la recolle dans mon tableau et que je la repropage à la main ça ne me donne le bon résultat que sur la première ligne.
Je ne sais pas si j'ai été clair.
Voici les lignes qui coincent.
For h = 1 To 12
colonne1 = -7 - 4 * (h - 1)
colonne3 = -(largeur2 - 1 + 4 * (h - 12)) + 5
Cells(4, -colonne1).FormulaR1C1 = _
"=SUMPRODUCT((RC[" & colonne1 + 1 & "]='[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C2:R1357C2)*ISNUMBER(SEARCH(RC[" & colonne1 + 5 & "],'[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C4:R1357C4))*'[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C" & labonnecolonne(h) & ":R1357C" & labonnecolonne(h) & ")"
Cells(4, -colonne1).AutoFill Destination:=Range(Cells(4, -colonne1), Cells(taille2, -colonne1)), Type:=xlFillDefault
Next h
j'ai essayé de mettre autre chose que xlFillDefault mais c'est pas mieux
Pour comprendre un peu mieux le code on peut prendre h=1
je veux écrire dans la colonne 7 la formule sumproduct et la propager sur toutes les lignes du dessous.
C'est une rechercheV à deux critères. Dans la colonne 7 je veux regarder la valeur dans la colonne 1 et la comparer à une dans un autre fichier, regarder aussi la colonne 5 et la comparer avec l'autre fichier, et renvoyer la valeur cellule de l'autre fichier qui est à la bonne ligne et bonne colonne. ça marche sur une ligne mais quand on propage ça ne propage que la formule, mais le résultat affiché est celui de la première ligne
Pouvez-vous m'aider ?
merci beaucoup !!
A voir également:
- Autofill d'une FormulaR1C1 mais pas interprétée !!
- Vba autofill ✓ - Forum Excel
- Formular1c1 - Forum VB / VBA
- [Excel VBA] Autofill sur une colonne ✓ - Forum VB / VBA
- FormulaR1C1 ✓ - Forum VB / VBA
- FormulaR1C1 ✓ - Forum VB / VBA
4 réponses
coucou,
Je ne sais pas si ca peut le faire mais remplace ton code par celui-ci :
For h = 1 To 12
colonne1 = -7 - 4 * (h - 1)
colonne3 = -(largeur2 - 1 + 4 * (h - 12)) + 5
Cells(4, -colonne1).FormulaR1C1 = _
"=SUMPRODUCT((RC[" & colonne1 + 1 & "]='[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C2:R1357C2)*ISNUMBER(SEARCH(RC[" & colonne1 + 5 & "],'[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C4:R1357C4))*'[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C" & labonnecolonne(h) & ":R1357C" & labonnecolonne(h) & ")"
Cells(4, -colonne1).copy Range(Cells(4, -colonne1), Cells(taille2, -colonne1))
Next h
Je ne sais pas si ca peut le faire mais remplace ton code par celui-ci :
For h = 1 To 12
colonne1 = -7 - 4 * (h - 1)
colonne3 = -(largeur2 - 1 + 4 * (h - 12)) + 5
Cells(4, -colonne1).FormulaR1C1 = _
"=SUMPRODUCT((RC[" & colonne1 + 1 & "]='[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C2:R1357C2)*ISNUMBER(SEARCH(RC[" & colonne1 + 5 & "],'[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C4:R1357C4))*'[PEM Plan Action Clients 2013.xlsm]Suivi Prev PEM'!R5C" & labonnecolonne(h) & ":R1357C" & labonnecolonne(h) & ")"
Cells(4, -colonne1).copy Range(Cells(4, -colonne1), Cells(taille2, -colonne1))
Next h
Akon93
même problème :(
Bonjour,
Petite question :
taille2 est égal à combien?
Cordialement,
Franck P
Petite question :
taille2 est égal à combien?
Cordialement,
Franck P
non rien d'anormal.
Ce qui me gène le plus, c'est l'utilisation d'une macro pour reproduire 600 formules SOMMEPROD().
A mon avis ça n'est pas le mieux que l'on puisse faire.
Une macro te sert à :
- automatiser une tâche récurrente
- alléger le classeur en formules "lourdes".
Ici, tes SOMMEPROD doivent alourdir conséquemment ton fichier. Je te préconise donc de faire le calcul des SOMMEPROD par macro et de n'afficher que les résultats.
Pour pouvoir t'aider là dedans, faudra que tu nous donnes les tests que réalise ces SOMMEPROD avec les intitulés de colonnes .
Exemple :
somme des valeurs de la colonne G (plage G10:G546), si colonne A on a "manger", colonne C on a "protéine"...
Tu dis...
Ce qui me gène le plus, c'est l'utilisation d'une macro pour reproduire 600 formules SOMMEPROD().
A mon avis ça n'est pas le mieux que l'on puisse faire.
Une macro te sert à :
- automatiser une tâche récurrente
- alléger le classeur en formules "lourdes".
Ici, tes SOMMEPROD doivent alourdir conséquemment ton fichier. Je te préconise donc de faire le calcul des SOMMEPROD par macro et de n'afficher que les résultats.
Pour pouvoir t'aider là dedans, faudra que tu nous donnes les tests que réalise ces SOMMEPROD avec les intitulés de colonnes .
Exemple :
somme des valeurs de la colonne G (plage G10:G546), si colonne A on a "manger", colonne C on a "protéine"...
Tu dis...
en fait le problème ne vient pas de la fonction, car j'ai remplacée cette formule par un simple
Cells(...).FormulaR1C1="=RC[-1]" et j'ai le même soucis.....
la fonction sommeprod c'était pour faire une rechercheV à deux critères, j'ai rien trouvé d'autre
"Je te préconise donc de faire le calcul des SOMMEPROD par macro et de n'afficher que les résultats. " : pas tout à fait compris
Cells(...).FormulaR1C1="=RC[-1]" et j'ai le même soucis.....
la fonction sommeprod c'était pour faire une rechercheV à deux critères, j'ai rien trouvé d'autre
"Je te préconise donc de faire le calcul des SOMMEPROD par macro et de n'afficher que les résultats. " : pas tout à fait compris
Plutôt que d'insérer des formules dans la feuille de calcul par VBA, dans ton cas, je penses qu'il vaut mieux faire le calcul par VBA puis d'insérer le résultat...
Ma macro fait 1000 lignes
Donc je penses qu'on arrive en fin de projet, ça ne va pas être évident pour nous t'aider.
1000 lignes c'est déjà une belle procédure.
Pourrait-on avoir accès à un classeur exemple sans données confidentielles?
Ma macro fait 1000 lignes
Donc je penses qu'on arrive en fin de projet, ça ne va pas être évident pour nous t'aider.
1000 lignes c'est déjà une belle procédure.
Pourrait-on avoir accès à un classeur exemple sans données confidentielles?
Bon j'ai trouvé la solution pour contourner le problème manuellement en faisant convertir sur chaque colonne. Cependant quand j'essaie de rentrer ça dans une boucle sous vba (car on ne peut convertir qu'une colonne à la fois) ça me donne n'importe quoi.
Du coup je cherche toujours comment ne pas avoir ce problème.
Cette fois-ci j'ai clairement cerné l'origine du problème.
En fait j'ai un tableau croisé dynamique.
Je fais une copie de ce tableau et je colle les valeurs dans une autre feuille de mon classeur. De cette manière j'ai un tableau classique mais qui ressemble à un tableau croisé dynamique. C'est à partir de là que ça ne marche plus, dès que je veux propager des formules elles ne sont plus interprétées.
Du coup je cherche toujours comment ne pas avoir ce problème.
Cette fois-ci j'ai clairement cerné l'origine du problème.
En fait j'ai un tableau croisé dynamique.
Je fais une copie de ce tableau et je colle les valeurs dans une autre feuille de mon classeur. De cette manière j'ai un tableau classique mais qui ressemble à un tableau croisé dynamique. C'est à partir de là que ça ne marche plus, dès que je veux propager des formules elles ne sont plus interprétées.
Bonjour,
J'ai déjà rencontré ce pb.
A tenter : Remplacer "=" par "=" et ta_plage.calculate
Des fois ça marche, des fois pas...
ça marche sur une ligne
Donc j'essaierais aussi de tout mettre en un coup sur la plage :
range("ta plage").FormulaR1C1 = "= ta formule"
en laissant excel adapter tes références relatives (en gros tu copie-colles ta formule qui marche bien de la 1ère cellule, et tu vois ensuite s'il te reste des trucs à adapter)
Un fichier exemple anonymisé serait le bienvenu...
eric
J'ai déjà rencontré ce pb.
A tenter : Remplacer "=" par "=" et ta_plage.calculate
Des fois ça marche, des fois pas...
ça marche sur une ligne
Donc j'essaierais aussi de tout mettre en un coup sur la plage :
range("ta plage").FormulaR1C1 = "= ta formule"
en laissant excel adapter tes références relatives (en gros tu copie-colles ta formule qui marche bien de la 1ère cellule, et tu vois ensuite s'il te reste des trucs à adapter)
Un fichier exemple anonymisé serait le bienvenu...
eric