Modifier formule en VBA pour lignes différentes
Eminini2017
-
Frenchie83 Messages postés 2254 Statut Membre -
Frenchie83 Messages postés 2254 Statut Membre -
Bonjour à tous!
Ça fait plusieurs jours que j'essaie de résoudre mon problème et je ne trouve aucune solution dans aucun forum... alors j'ai décidé de demander aux experts ;)
Voila, c'est que j'ai pour au dessus de 100 000 lignes de formules à changer en ajoutant une partie de code au début et à la fin et chacune de ces lignes sont différentes.. alors je ne peux donc pas imbriquer mon code pour qu'il se met automatiquement sur chaque ligne.
Voici à quoi ressemble mes lignes:
=MOYENNE(SI(S2014645A!$MO$5:$MO$8490=1;SI(S2014645A!$E$5:$E$8490="m";SI(S2014645A!$G$5:$G$8490>=40;SI(S2014645A!$G$5:$G$8490<50;S2014645A!$S$5:$S$8490;"");"");"");""))
Les parties qui changent à chaque lignes sont (m=masculin et f=féminin et 40 et 50 sont des intervalles d'âges) et "S2014645A!$S$5:$S$8490" et "S2014645A!$MO$5:$MO$8490" change à chaque 50 lignes environ
Je veux changer ces lignes pour rajouter ceci:
=MOYENNE(SI(S2014645A!$MO$5:$MO$8490=1
;SI(S2014645A!$H$5:$H$8490=1;SI(S2014645A!$E$5:$E$8490="m";SI(S2014645A!$G$5:$G$8490>=40;SI(S2014645A!$G$5:$G$8490<50;S2014645A!$S$5:$S$8490;"");"");"");"");"")).
Voici le code que j'ai essayé de faire mais j'ai toujours un message d'erreur 1004 à cause du ";".. (D’où la raison pour laquelle j'ai décidé de mettre la nouvelle section dans une variable maVal... et je ne suis même pas rendu à mettre le " ;"") " encore car le premier ajout ne fonctionne pas...
Sub Macro2()
Dim i As Single
Dim sht As Worksheet
Dim maVal As String
maVal = ";SI(S2014645A!$H$5:$H$8490=1"
Set sht = ThisWorkbook.Worksheets("MÉD RMB")
With sht
For i = 1 To 49 (*J'essaie pour l'instant que les 50 premières lignes pour être sur que ça fonctionne)
' .Cells(i, 5).Formula = .Cells(i, 4).Formula
.Range("E49").FormulaLocal = Replace(.Range("E49").FormulaLocal, "(SI(S2014645A!$MO$5:$MO$8490=1", "(SI(S2014645A!$MO$5:$MO$8490=1" & maVal) (Ici je n'essaie qu'avec une cellule pour voir mais je devrais mettre .Cell(i,5).FormulaLocal ... sauf si vous me dite que ça ne fonctionne pas)
' .Range("E49").FormulaArray = .Range("E49").FormulaLocal
Next i
End With
End Sub
HELP. Mercii
Ça fait plusieurs jours que j'essaie de résoudre mon problème et je ne trouve aucune solution dans aucun forum... alors j'ai décidé de demander aux experts ;)
Voila, c'est que j'ai pour au dessus de 100 000 lignes de formules à changer en ajoutant une partie de code au début et à la fin et chacune de ces lignes sont différentes.. alors je ne peux donc pas imbriquer mon code pour qu'il se met automatiquement sur chaque ligne.
Voici à quoi ressemble mes lignes:
=MOYENNE(SI(S2014645A!$MO$5:$MO$8490=1;SI(S2014645A!$E$5:$E$8490="m";SI(S2014645A!$G$5:$G$8490>=40;SI(S2014645A!$G$5:$G$8490<50;S2014645A!$S$5:$S$8490;"");"");"");""))
Les parties qui changent à chaque lignes sont (m=masculin et f=féminin et 40 et 50 sont des intervalles d'âges) et "S2014645A!$S$5:$S$8490" et "S2014645A!$MO$5:$MO$8490" change à chaque 50 lignes environ
Je veux changer ces lignes pour rajouter ceci:
=MOYENNE(SI(S2014645A!$MO$5:$MO$8490=1
;SI(S2014645A!$H$5:$H$8490=1;SI(S2014645A!$E$5:$E$8490="m";SI(S2014645A!$G$5:$G$8490>=40;SI(S2014645A!$G$5:$G$8490<50;S2014645A!$S$5:$S$8490;"");"");"");"");"")).
Voici le code que j'ai essayé de faire mais j'ai toujours un message d'erreur 1004 à cause du ";".. (D’où la raison pour laquelle j'ai décidé de mettre la nouvelle section dans une variable maVal... et je ne suis même pas rendu à mettre le " ;"") " encore car le premier ajout ne fonctionne pas...
Sub Macro2()
Dim i As Single
Dim sht As Worksheet
Dim maVal As String
maVal = ";SI(S2014645A!$H$5:$H$8490=1"
Set sht = ThisWorkbook.Worksheets("MÉD RMB")
With sht
For i = 1 To 49 (*J'essaie pour l'instant que les 50 premières lignes pour être sur que ça fonctionne)
' .Cells(i, 5).Formula = .Cells(i, 4).Formula
.Range("E49").FormulaLocal = Replace(.Range("E49").FormulaLocal, "(SI(S2014645A!$MO$5:$MO$8490=1", "(SI(S2014645A!$MO$5:$MO$8490=1" & maVal) (Ici je n'essaie qu'avec une cellule pour voir mais je devrais mettre .Cell(i,5).FormulaLocal ... sauf si vous me dite que ça ne fonctionne pas)
' .Range("E49").FormulaArray = .Range("E49").FormulaLocal
Next i
End With
End Sub
HELP. Mercii
A voir également:
- Modifier formule en VBA pour lignes différentes
- Modifier dns - Guide
- Formule si et - Guide
- Modifier liste déroulante excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Formule somme excel ligne - Guide
3 réponses
Bonjour
Si j'ai bien compris votre formule vous voulez faire la moyenne de la colonne "S" si toutes les conditions sont réunies. Pourquoi ne pas utiliser la formule suivante qui me semble plus simple:
=SIERREUR(MOYENNE.SI.ENS(S2014645A!$S$5:$S$8490;S2014645A!$MO$5:$MO$8490;1;S2014645A!$H$5:$H$8490;1;S2014645A!$E$5:$E$8490;"m";S2014645A!$G$5:$G$8490;">=40";S2014645A!$G$5:$G$8490;"<50");"")
ce qui donne en VBA:
"=IFERROR(AVERAGEIFS(S2014645A!R5C19:R8490C19,S2014645A!R5C353:R8490C353,1,S2014645A!R5C8:R8490C8,1,S2014645A!R5C5:R8490C5,""m"",S2014645A!R5C7:R8490C7,"">=40"",S2014645A!R5C7:R8490C7,""<50""),"""")"
A adapter selon vos besoins.
Cdlt
Si j'ai bien compris votre formule vous voulez faire la moyenne de la colonne "S" si toutes les conditions sont réunies. Pourquoi ne pas utiliser la formule suivante qui me semble plus simple:
=SIERREUR(MOYENNE.SI.ENS(S2014645A!$S$5:$S$8490;S2014645A!$MO$5:$MO$8490;1;S2014645A!$H$5:$H$8490;1;S2014645A!$E$5:$E$8490;"m";S2014645A!$G$5:$G$8490;">=40";S2014645A!$G$5:$G$8490;"<50");"")
ce qui donne en VBA:
"=IFERROR(AVERAGEIFS(S2014645A!R5C19:R8490C19,S2014645A!R5C353:R8490C353,1,S2014645A!R5C8:R8490C8,1,S2014645A!R5C5:R8490C5,""m"",S2014645A!R5C7:R8490C7,"">=40"",S2014645A!R5C7:R8490C7,""<50""),"""")"
A adapter selon vos besoins.
Cdlt
OUi en effet ça revient au même, mais là j'ai pour 100 000 lignes différentes.. je ne peux pas commencer à les changer une par une avec ta nouvelle formule. Je voudrais simplement rajouter aux formules déjà existantes mes parties soulignées exactement à ces endroit.
Bonjour
Voilà pour le principe, j'ai conservé votre formule, mais je ne suis pas convaincu qu'elle fonctionne.
Cdlt
maVal = "S2014645A!$H$5:$H$8490=1"
Formule = "=AVERAGE(IF(S2014645A!R5C353:R8490C353=1,IF(" & MaVar & ",IF(S2014645A!R5C5:R8490C5=""m"",IF(S2014645A!R5C7:R8490C7>=40,IF(S2014645A!R5C7:R8490C7<50,S2014645A!R5C19:R8490C19,""""),""""),""""),""""),""""))"
Set sht = ThisWorkbook.Worksheets("MÉD RMB")
With sht
For i = 1 To 49
.Cells(i, 5).FormulaR1C1 = Formule
Next i
End With
Voilà pour le principe, j'ai conservé votre formule, mais je ne suis pas convaincu qu'elle fonctionne.
Cdlt