Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calculer une même formule sur plage de cellule qui changera

3 réponses
Avatar
roleca7
Bonjour =E0 tous, je souhaite appliquer une m=EAme formule sur une plage
de cellules qui pourra varier dans le temps sur 2 onglets particuliers
en VBA.

J'ai commenc=E9 par faire la boucle suivante =E9tant donn=E9 que je
connais d=E9j=E0 les 2 onglets qui m'int=E9ressent : les onglets 3 et 4
de mon classeur.

For Sheets (i) =3D3 To Sheets (4)
Next i

Mais je ne sais pas comment faire pour appliquer la formule car pour
l'instant ma plage de cellule va de la cellule C6 =E0 F13 mais =E0
l'avenir, le nombre de lignes vers le bas pourra changer ainsi que le
nombre de colonnes vers la droite.

La formule qui sera =E0 effectuer pour toutes les cellules o=F9 il y a
des nombres (il faut donc g=E9rer le cas o=F9 il n'y a pas de chiffres)
sera la suivante : (le chiffre de la cellule *100)/le total de la
colonne faisant r=E9f=E9rence =E0 cette cellule.

Merci d'avance si vous trouver le code vba exact ou si vous pouvez
m'avancer dans ma recherche.

3 réponses

Avatar
lSteph
Bonjour,

L'ennui c'est que la formule que tu suggère invoque une ...

Référence circulaire ...puisque le total fait référence à son propre
résultat!

autrement ce serait un truc du style:
For i = 3 to 4
sheets(i).range("maplage").cells.formula=............
next i

Sinon pour les autres détails:
mais à
l'avenir, le nombre de lignes vers le bas pourra changer ainsi que le
nombre de colonnes vers la droite.


Il faut définir un nom pour ta plage exemple maplage et après:
attention, si tu ajoutes des lignes ou des colonnes, et si celles ci sont
posée juste après la plage, la plage les ignorera,
en revanche:
si tu insères ces lignes ou colonnes supplémentaires à l'intérieur de la
plage cela sera pris en compte dans la référence
de plage qui s'étendra dynamiquement.
De même si tu as défini un nom pour la ligne du total il en sera
automatiquement décalé.

Cordialement.

lSteph


"roleca7" a écrit dans le message de news:

Bonjour à tous, je souhaite appliquer une même formule sur une plage
de cellules qui pourra varier dans le temps sur 2 onglets particuliers
en VBA.

J'ai commencé par faire la boucle suivante étant donné que je
connais déjà les 2 onglets qui m'intéressent : les onglets 3 et 4
de mon classeur.

For Sheets (i) =3 To Sheets (4)
Next i

Mais je ne sais pas comment faire pour appliquer la formule car pour
l'instant ma plage de cellule va de la cellule C6 à F13 mais à
l'avenir, le nombre de lignes vers le bas pourra changer ainsi que le
nombre de colonnes vers la droite.

La formule qui sera à effectuer pour toutes les cellules où il y a
des nombres (il faut donc gérer le cas où il n'y a pas de chiffres)
sera la suivante : (le chiffre de la cellule *100)/le total de la
colonne faisant référence à cette cellule.

Merci d'avance si vous trouver le code vba exact ou si vous pouvez
m'avancer dans ma recherche.

Avatar
roleca7
Merci pour cette aide qui m'aide à comprendre mieux le pb !
J'ai donc défini une plage de ma ligne où il y a les totaux et j'ai
écris la ligne de code suivante :

Dim i As Integer

For i = 3 To 4
Sheets(i).Range("maplage").Cells.Formula = Range("maplage").Cells * 100
/ Range("montotal").Cells

Next i

Ce code ne fonctionne pas car cela me met un erreur d'exécution 13 :
incompatibilité de type...

Je ne sais pas comment désigner les cellules actives pour lui dire je
veux faire la multiplication par 100 de toutes mes cellules actives
dans ma plage, divisées par les cellules de chaque total des
colonnes...

Avez-vous une idée ou même le code exact ?

Merci d'avance

Bonjour,

L'ennui c'est que la formule que tu suggère invoque une ...

Référence circulaire ...puisque le total fait référence à son propre
résultat!

autrement ce serait un truc du style:
For i = 3 to 4
sheets(i).range("maplage").cells.formula=............
next i

Sinon pour les autres détails:
mais à
l'avenir, le nombre de lignes vers le bas pourra changer ainsi que le
nombre de colonnes vers la droite.


Il faut définir un nom pour ta plage exemple maplage et après:
attention, si tu ajoutes des lignes ou des colonnes, et si celles ci sont
posée juste après la plage, la plage les ignorera,
en revanche:
si tu insères ces lignes ou colonnes supplémentaires à l'intéri eur de la
plage cela sera pris en compte dans la référence
de plage qui s'étendra dynamiquement.
De même si tu as défini un nom pour la ligne du total il en sera
automatiquement décalé.

Cordialement.

lSteph


"roleca7" a écrit dans le message de news:

Bonjour à tous, je souhaite appliquer une même formule sur une plage
de cellules qui pourra varier dans le temps sur 2 onglets particuliers
en VBA.

J'ai commencé par faire la boucle suivante étant donné que je
connais déjà les 2 onglets qui m'intéressent : les onglets 3 et 4
de mon classeur.

For Sheets (i) =3 To Sheets (4)
Next i

Mais je ne sais pas comment faire pour appliquer la formule car pour
l'instant ma plage de cellule va de la cellule C6 à F13 mais à
l'avenir, le nombre de lignes vers le bas pourra changer ainsi que le
nombre de colonnes vers la droite.

La formule qui sera à effectuer pour toutes les cellules où il y a
des nombres (il faut donc gérer le cas où il n'y a pas de chiffres)
sera la suivante : (le chiffre de la cellule *100)/le total de la
colonne faisant référence à cette cellule.

Merci d'avance si vous trouver le code vba exact ou si vous pouvez
m'avancer dans ma recherche.



Avatar
lSteph
Bonjour,

Outre la syntaxe type que j'avais abbrégée pour un For i= 3 to 4...For each
c in sheets(i)...

Je n'ai pas été assez clair effectivement!
C'est le genre de chose qui pourrait se faire si tu ne mets pas en formule
un total qui va
lui même changer et être rappelé lui même dans chaque formule de cellule .

Donc mon message signifiait plus précisément:

Ce n'est pas possible ainsi dans la mesure ou cela génère une

"Référence Circulaire".

lSteph

"roleca7" a écrit dans le message de news:

Merci pour cette aide qui m'aide à comprendre mieux le pb !
J'ai donc défini une plage de ma ligne où il y a les totaux et j'ai
écris la ligne de code suivante :

Dim i As Integer

For i = 3 To 4
Sheets(i).Range("maplage").Cells.Formula = Range("maplage").Cells * 100
/ Range("montotal").Cells

Next i

Ce code ne fonctionne pas car cela me met un erreur d'exécution 13 :
incompatibilité de type...

Je ne sais pas comment désigner les cellules actives pour lui dire je
veux faire la multiplication par 100 de toutes mes cellules actives
dans ma plage, divisées par les cellules de chaque total des
colonnes...

Avez-vous une idée ou même le code exact ?

Merci d'avance

Bonjour,

L'ennui c'est que la formule que tu suggère invoque une ...

Référence circulaire ...puisque le total fait référence à son propre
résultat!

autrement ce serait un truc du style:
For i = 3 to 4
sheets(i).range("maplage").cells.formula=............
next i

Sinon pour les autres détails:
mais à
l'avenir, le nombre de lignes vers le bas pourra changer ainsi que le
nombre de colonnes vers la droite.


Il faut définir un nom pour ta plage exemple maplage et après:
attention, si tu ajoutes des lignes ou des colonnes, et si celles ci sont
posée juste après la plage, la plage les ignorera,
en revanche:
si tu insères ces lignes ou colonnes supplémentaires à l'intérieur de la
plage cela sera pris en compte dans la référence
de plage qui s'étendra dynamiquement.
De même si tu as défini un nom pour la ligne du total il en sera
automatiquement décalé.

Cordialement.

lSteph


"roleca7" a écrit dans le message de news:

Bonjour à tous, je souhaite appliquer une même formule sur une plage
de cellules qui pourra varier dans le temps sur 2 onglets particuliers
en VBA.

J'ai commencé par faire la boucle suivante étant donné que je
connais déjà les 2 onglets qui m'intéressent : les onglets 3 et 4
de mon classeur.

For Sheets (i) =3 To Sheets (4)
Next i

Mais je ne sais pas comment faire pour appliquer la formule car pour
l'instant ma plage de cellule va de la cellule C6 à F13 mais à
l'avenir, le nombre de lignes vers le bas pourra changer ainsi que le
nombre de colonnes vers la droite.

La formule qui sera à effectuer pour toutes les cellules où il y a
des nombres (il faut donc gérer le cas où il n'y a pas de chiffres)
sera la suivante : (le chiffre de la cellule *100)/le total de la
colonne faisant référence à cette cellule.

Merci d'avance si vous trouver le code vba exact ou si vous pouvez
m'avancer dans ma recherche.