XL 2016 Retranscrire une formule conditionnelle en Vba

ReneDav14000

XLDnaute Occasionnel
Bonjour à tous,
J'ai cette formule de calcul en colonne G de mon tableau et elle doit s'appliquer à toutes la colonne G quel que soit le nombre de ligne. Comment dois-je procéder ? Je pense devoir la traduire en Anglais ?
Merci pour votre aide
VB:
=SI(ET(A7<>"";B7<>"");B7-A7;SI(ET(A7<>"";B7="";ET(C7<>"";D7=""));"";SI(ET(A7<>"";B7="";C7="";D7<>"");Max_Matin-A7;SI(ET(A7<>"";B7="";ET(E7<>"";F7<>""));"";SI(ET(A7<>"";B7="";C7="";D7="";E7="";F7<>"");Max_Matin-A7;"")))))
 
Solution
Bonjour René,
Je pense devoir la traduire en Anglais ?
Pas obligatoirement, vous pouvez utiliser FormulaLocal qui utilisera la syntaxe de votre excel.
Si la formule doit commencer en G7 et finir sur la dernière ligne occupée de la colonne A, vous pouvez faire :
VB:
Sub CopieFormule()
    Application.ScreenUpdating = False
    DL = Range("A65500").End(xlUp).Row ' Si la colonne A à le maximum de ligne
    Range("G7:G" & DL).FormulaLocal = "=SI(ET(A7<>"""";B7<>"""");B7-A7;SI(ET(A7<>"""";B7="""";ET(C7<>"""";D7=""""));"""";SI(ET(A7<>"""";B7="""";C7="""";D7<>"""");Max_Matin-A7;SI(ET(A7<>"""";B7="""";ET(E7<>"""";F7<>""""));"""";SI(ET(A7<>"""";B7="""";C7="""";D7="""";E7="""";F7<>"""");Max_Matin-A7;"""")))))"
End Sub
Attention aux...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour René,
Je pense devoir la traduire en Anglais ?
Pas obligatoirement, vous pouvez utiliser FormulaLocal qui utilisera la syntaxe de votre excel.
Si la formule doit commencer en G7 et finir sur la dernière ligne occupée de la colonne A, vous pouvez faire :
VB:
Sub CopieFormule()
    Application.ScreenUpdating = False
    DL = Range("A65500").End(xlUp).Row ' Si la colonne A à le maximum de ligne
    Range("G7:G" & DL).FormulaLocal = "=SI(ET(A7<>"""";B7<>"""");B7-A7;SI(ET(A7<>"""";B7="""";ET(C7<>"""";D7=""""));"""";SI(ET(A7<>"""";B7="""";C7="""";D7<>"""");Max_Matin-A7;SI(ET(A7<>"""";B7="""";ET(E7<>"""";F7<>""""));"""";SI(ET(A7<>"""";B7="""";C7="""";D7="""";E7="""";F7<>"""");Max_Matin-A7;"""")))))"
End Sub
Attention aux guillemets, c'est toujours la galère, pour 2 guillemets, il en faut 4, les deux extérieurs pour dire que c'est une chaine, les deux intérieur pour dire que la chaine est "".
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
elle doit s'appliquer à toutes la colonne G quel que soit le nombre de ligne.
Il faut bien calculer le nombre de lignes sur lesquelles mettre la formule.
C'est pour ça que j'ai précisé : ' Si la colonne A à le maximum de ligne
Donc DL = Range("A65500").End(xlUp).Row permet de calculer quelle est la dernière ligne de A occupée, et on propage la formule de G7 à Gxx , xx étant la valeur de DL.
 

ReneDav14000

XLDnaute Occasionnel
Il faut bien calculer le nombre de lignes sur lesquelles mettre la formule.
C'est pour ça que j'ai précisé : ' Si la colonne A à le maximum de ligne
Donc DL = Range("A65500").End(xlUp).Row permet de calculer quelle est la dernière ligne de A occupée, et on propage la formule de G7 à Gxx , xx étant la valeur de DL.
D'accord, je comprends mieux.
Merci
Juste une dernière question, cette formule est-ce qu'il faut la mettre dans un module ou directement dans la feuille de calcul, dans Worksheet change ou autre ?
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 318
Membres
103 176
dernier inscrit
jean.yvesjean.yves