En ces temps difficiles, j'espère que vous vous portez bien...
Cela fait deux jours que je bute sur un "petit" problème (pour vous, grand pour moi) : la copie d'une formule.
Explication : par macro j'essaie de copier une formule d'une cellule dans une autre cellule (en l’occurrence celle d'en dessous).
Après quelques recherches, j'ai trouvé :
exemple : en ligne 82 ,j'ai la formule suivante : =SI(G82="";"";SI(K82>D82;K82+G82;D82+G82))
Quand ma macro la copie en ligne 83 cela donne : =SI(G82="";"";SI(K82>D82;K82+G82;D82+G82))
Donc la copie fonctionne bien, mais j'aimerai qu'à la place de "82" la formule soit indexée par le numéro de ligne et donne : =SI(G83="";"";SI(K83>D83;K83+G83;D83+G83)). Et je n'ai pas trouvé comment !! (même en regardant sur le site de mon "maître" excellentissime Jacques Boisgontier !!).
Voici le bout de code trouvé sur le net que j'utilise (c'est sans doute pas très académique, mais j'arrive à "me" comprendre !! ) :
With Worksheets("ALED")
Formule = .Range(Cells(DerniereLigne, 8), Cells(DerniereLigne, 8)).Formula
End With
With Worksheets("ALED")
.Range(Cells(DerniereLigne + 1, 8), Cells(DerniereLigne + 1, 8)).Formula = Formule
End With
Vous n'avez pas besoin de faire ça !
Travaillez avec FormulaR1C1 bon sang !
En H8, en notation A1 française (propriété FormulaLocal que je n'utilise jamais) :
Code:
=SI($G8="";"";MAX($D8;$K8)+$G8)
Se traduit en notation R1C1 par :
Code:
=IF(RC7="","",MAX(RC4,RC11)+RC7)
quelle que soit la ligne, puisque les références relatives le sont toujours par rapport à la cellule qui porte la formule. Et ça peut donc se programmer par :
Bonjour D.D.
Merci pour ta proposition..... mais malheureusement, elle donne le même résultat !!
Le "concours" reste ouvert !!
En tout cas, merci vraiment....
Merci pour ce fichier exemple... qui fonctionne. Je l'ai bidouillé pour introduire une fonction ressemblante avec celle que j'utilise.... et cela fonctionne dans ton fichier.
Mais j'ai copié, vérifié ce bout de code dans mon fichier, et il n'y a pas à "tortillé", cela ne fonctionne pas !!!
Comme il y a des noms de personne dans mon fichier et que c'est un peu confidentiel, j'ai fabriqué un fichier de test avec toutes les macros du dossier. Et cela ne marche pas !
il faut aller dans la feuille Archive 2020 et cliquer sur " bouton 3". Accepter l'année proposée (2020) et saisir la ligne 2 ou 3 (les seules que j'ai gardée) ... et voir dans la feuille "ALED" la dernière ligne ...
Merci pour cette idée.
Malheureusement, mon faible niveau vba ne me permet pas de l'implémenter !
Quand j'essaie de mettre simplement la formule dans la cellule à la main... j'ai une erreur #NOM?.
J'ai compris qu'il me fallait mettre cela en français....
Cela donne : =SI(RC7="";"";MAX(RC4;RC11)+RC7)
Seulement cela ne fonctionne pas : résultat : cellule vide.
En fait, si j'écris " =si(RC7=""; "toto"; "tata") le résultat est toto....
En fait : RC7 n'est pas correctement traduit : si j'écris simplement =RC7 le résultat est 0 alors qu'il y a 60 dans la colonne 7 de la ligne ....
Bref.... j'avais trouvé une solution, qui implémentée à la main directement dans la celule en tant que formule fonctionne... mais mise dans le code me donne une formule 1004....
Le code :
Formule = "=SI(INDIRECT(CONCATENER(""G"";LIGNE()))="""";"""";MAX(INDIRECT(CONCATENER(""D"";LIGNE()));INDIRECT(CONCATENER(""K"";LIGNE())))+INDIRECT(CONCATENER(""G""; LIGNE())))"
'End With
With Worksheets("ALED")
.Range(Cells(DerniereLigne + 1, 8), Cells(DerniereLigne + 1, 8)).Formula = Formule
End With
Bon, j'avance un peu, peut-être pas le plus académiquement... mais je bloque encore.... si vous avez des idées !!
Vous n'avez pas besoin de faire ça !
Travaillez avec FormulaR1C1 bon sang !
En H8, en notation A1 française (propriété FormulaLocal que je n'utilise jamais) :
Code:
=SI($G8="";"";MAX($D8;$K8)+$G8)
Se traduit en notation R1C1 par :
Code:
=IF(RC7="","",MAX(RC4,RC11)+RC7)
quelle que soit la ligne, puisque les références relatives le sont toujours par rapport à la cellule qui porte la formule. Et ça peut donc se programmer par :
Vous n'avez pas besoin de faire ça !
Travaillez avec FormulaR1C1 bon sang !
En H8, en notation A1 française (propriété FormulaLocal que je n'utilise jamais) :
Code:
=SI($G8="";"";MAX($D8;$K8)+$G8)
Se traduit en notation R1C1 par :
Code:
=IF(RC7="","",MAX(RC4,RC11)+RC7)
quelle que soit la ligne, puisque les références relatives le sont toujours par rapport à la cellule qui porte la formule. Et ça peut donc se programmer par :
Bonjour,
Eh oui, cela peut vous paraitre simple et évident, mais pour moi.... c'est toujours un peu compliqué et je ne maîtrise pas tout !!
Et j'en apprends tous les jours....
En tout cas merci : j'ai enfin une solution :
la voici :
Worksheets("ALED").Cells(DerniereLigne + 1, 8).FormulaR1C1Local = "=SI(LC7="""";"""";MAX(LC4;LC11)+LC7)"
et cela donne dans la cellule en ligne 14 (par exemple) : =SI($G14="";"";MAX($D14;$K14)+$G14)