Passage de formule en VBA [Résolu]

Kusco 472 Messages postés vendredi 4 janvier 2008Date d'inscription 15 décembre 2014 Dernière intervention - 30 oct. 2013 à 10:02 - Dernière réponse : Kusco 472 Messages postés vendredi 4 janvier 2008Date d'inscription 15 décembre 2014 Dernière intervention
- 30 oct. 2013 à 12:21
Bonjour à tous,

Malgré mes différents passages sur les forums, je ne comprends pas pourquoi ma formule ne fonctionne pas. J'ai essayé plusieurs choses mais impossible.

Avec un formulaire (userform), une fois le bouton sauvegarder presser, la ligne X à la colonne 13 doit apparaître cette formule :
=DATEDIF(LX;AUJOURDHUI();"y")&" Ans "&DATEDIF(Lx;AUJOURDHUI();"ym")&" mois"


J'ai essayé avec ceci et bien d'autre formules mais cela ne fonctionne pas :
Cells(no_ligne, 13).Value = "=(DATEDIF(L & no_ligne;TODAY();y)& Ans &DATEDIF(L & no_ligne;TODAY();ym)& mois)" 


Une idée ? Merci !
Afficher la suite 

Votre réponse

16 réponses

Meilleure réponse
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionContributeurStatut 13 septembre 2017 Dernière intervention - 30 oct. 2013 à 11:20
1
Merci
1- Si ton Excel est Anglais, utilises "TODAY" sinon "AUJOURDHUI()" semble plus adapté...

2- S'il est en Français, utilise également FormulaLocal et non FormulaR1C1 (comme indiqué par UcFoutu)

3- Lorsque, dans une formule, un terme doit être entouré de guillemets, il convient, sous VBA, de les doubler :
exemple :
Cells(no_lig, 1).FormulaLocal = "=DATEDIF(L" & no_lig & ";AUJOURDHUI();""y"")&"" Ans """


Merci pijaku 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de pijaku
jordane45 22111 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 18 août 2018 Dernière intervention - 30 oct. 2013 à 10:12
0
Merci
Bonjour,

J'ai déplacé le sujet dans la section VBA (merci de faire attention la prochaine fois)

Lorsque vous collez du code dans vos messages, merci d'utiliser la coloration syntaxique ( voir ICI : balises-code)

Enfin, pour répondre à votre question, vous ne devez pas utiliser la propriété VALUE mais FORMULAR1C1 ou FORMULALOCAL (voir aide Excel VBA )

Commenter la réponse de jordane45
Kusco 472 Messages postés vendredi 4 janvier 2008Date d'inscription 15 décembre 2014 Dernière intervention - 30 oct. 2013 à 10:42
0
Merci
Bonjour,

Excuse moi, je n'avais pas tout de suite différencié.

Modifié, je prends note.

Je viens d'essayer, aucun résultat :Erreur 1004 erreur défini par l'application ou l'objet.
Commenter la réponse de Kusco
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 30 oct. 2013 à 10:50
0
Merci
Bonjour,
avec quelle syntaxe (un copier/coller de ton code) ?
Commenter la réponse de ucfoutu
Kusco 472 Messages postés vendredi 4 janvier 2008Date d'inscription 15 décembre 2014 Dernière intervention - 30 oct. 2013 à 10:57
0
Merci
Voici mon code en entier :

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False

Dim no_ligne As Integer

Sheets("BDD").Select
no_ligne = Range("A65536").End(xlUp).Row + 1

Cells(no_ligne, 1) = T1
Cells(no_ligne, 2) = T2
Cells(no_ligne, 3) = T3
Cells(no_ligne, 4) = T8
Cells(no_ligne, 5) = T9
Cells(no_ligne, 6) = T10
Cells(no_ligne, 7) = T14
Cells(no_ligne, 8) = T5
Cells(no_ligne, 9) = C4
Cells(no_ligne, 10) = C5
Cells(no_ligne, 11) = C1
Cells(no_ligne, 12) = T12
Cells(no_ligne, 13).FormulaR1C1 = "=(DATEDIF(L & no_ligne;TODAY();y)& Ans &DATEDIF(L & no_ligne;TODAY();ym)& mois)"
Cells(no_ligne, 14).FormulaR1C1 = "=(TODAY()-L & no_ligne)/365"
Cells(no_ligne, 15) = T13
Cells(no_ligne, 16) = C6
Cells(no_ligne, 19) = T7
Cells(no_ligne, 20) = T20

End Sub
Commenter la réponse de Kusco
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionContributeurStatut 13 septembre 2017 Dernière intervention - 30 oct. 2013 à 11:02
0
Merci
Bonjour tout le monde.

La première erreur que je constate dans la ligne de code donnée, est le "mixage" de variable dans la formule.
Je suppose que no_ligne est une variable???
Il faut donc "l'isoler" (désolé je ne connais pas le terme technique) du reste de la formule.

Exemple d'une formule qui fonctionne avec une variable intégrée :
no_ligne = 5
Cells(no_ligne, 13).FormulaLocal = "=SOMME(A1:A" & no_ligne & ")"

On voit, dans cet exemple, que la variable est "sortie" des guillemets et placée entre deux &.
Commenter la réponse de pijaku
Kusco 472 Messages postés vendredi 4 janvier 2008Date d'inscription 15 décembre 2014 Dernière intervention - 30 oct. 2013 à 11:10
0
Merci
Bonjour,

Autant pour moi je l'ignorais.
no_ligne est bien une variable, elle définit le numéro de la dernière ligne.

J'ai donc essayé :
Cells(no_ligne, 13).FormulaR1C1 = "=(DATEDIF(L2:L" & no_ligne & ";TODAY();y)& Ans &DATEDIF(L2:L" & no_ligne & ";TODAY();ym)& mois)"
Cells(no_ligne, 14).FormulaR1C1 = "=(TODAY()-L2:L" & no_ligne & ")/365"


Toujours la même erreur cependant.
Commenter la réponse de Kusco
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 30 oct. 2013 à 11:10
0
Merci
On commence par la première :
1) un simple
MsgBox "=(DATEDIF(L & no_ligne;TODAY();y)& Ans &DATEDIF(L & no_ligne;TODAY();ym)& mois)"

te montrerait que cette formule ne peut fonctionner !
Commence par apprendre (depuis Excel) à la "dresser" manuellement, avant de vouloir tenter de l'écrire dynamiquement
2) la notation FORMULAR1C1 (comme celle de FORMULA) n'est pas française, mais anglaise (, et non ;), contrairement à celle de FORMULALOCAL et FORMULAR1C1LOCAL (qui, par contre, doivent elles utiliser les termes de la langue de ton PC).
Commenter la réponse de ucfoutu
Kusco 472 Messages postés vendredi 4 janvier 2008Date d'inscription 15 décembre 2014 Dernière intervention - 30 oct. 2013 à 11:16
0
Merci
1) Ma formule sous excel fonctionne parfaitement, elle est peut être mal adapté plutôt.
=DATEDIF(LX;AUJOURDHUI();"y")&" Ans "&DATEDIF(Lx;AUJOURDHUI();"ym")&" mois"


2) Autant pour moi, mais du coup en utilisant les termes "TODAY" plutôt que "AUJOURDHUI" cela ne pose pas de problème, si ?
Commenter la réponse de Kusco
Kusco 472 Messages postés vendredi 4 janvier 2008Date d'inscription 15 décembre 2014 Dernière intervention - 30 oct. 2013 à 11:39
0
Merci
D'accord merci pour ces informations complémentaires, cela me servira beaucoup à l'avenir.

Ta formule fonctionne très bien, merci beaucoup je n'ai plus d'erreur.
Cependant la formule dans la cellule affiche ceci par exemple :
=DATEDIF($14:$14;AUJOURDHUI();"y")&" Ans " &DATEDIF($14:$14;AUJOURDHUI();"ym")&"mois"


Du coup cela prends en compte toute la ligne plutôt que la colonne est donc cela ne fonctionne pas. Une idée ?
Commenter la réponse de Kusco
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionContributeurStatut 13 septembre 2017 Dernière intervention - Modifié par pijaku le 30/10/2013 à 11:47
0
Merci
Je vais donc rejoindre ucfoutu et bon nombre d'adeptes de VBA Excel en te disant :
"avant de penser VBA, pense Excel."

Comment écrirais tu ta formule sous Excel?

Exemple de démarche à accomplir :
1- j'écris ma formule dans le tableur, en B1 :
=SOMME(A1:A10)
2- Je transcris en VBA :
Cells(1, 2).FormulaLocal = "=SOMME(A1:A10)"

3- J'insère ma variable :
ici la dernière ligne remplie de la colonne A, afin de faire la somme de A1 à la dernière cellule saisie de la colonne A :
Dim DernLigne As Long
'Attribution de la valeur à la variable
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
'insertion de la variable dans la formule
Cells(1, 2).FormulaLocal = "=SOMME(A1:A" & DernLigne & ")"


Une fois ton problème initial bien posé, tu te rends compte qu'il se résout de lui même...
Cordialement,
Franck
Commenter la réponse de pijaku
Kusco 472 Messages postés vendredi 4 janvier 2008Date d'inscription 15 décembre 2014 Dernière intervention - 30 oct. 2013 à 12:02
0
Merci
Je t'avoue que je ne comprends pas.
Je vois ce que tu cherches à me dire et du coup j'ai essayé de tout refaire par rapport à ce que tu me disais, mais je suis retombé sur la formule que tu avais écrite.

En pensant excel la formule fonctionne, où me suis trompé ?

Merci pour ton temps...
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionContributeurStatut 13 septembre 2017 Dernière intervention - 30 oct. 2013 à 12:08
De rien pour mon temps...

Lorsque tu écris, dans une formule, $14:$14, tu fais référence à la ligne 14. Si tu veux faire référence à la colonne B, il convient d'écrire : $B:$B. Mais là c'est du Excel, pas du VBA...

Essaye ces formules :
=SOMME($G:$G)
=SOMME($14:$14)

J'ajouterais ceci, à bon entendeur :
Eviter un maximum d'écrire des formules qui ont pour plage de valeurs des colonnes (ou des lignes) entières.
Kusco 472 Messages postés vendredi 4 janvier 2008Date d'inscription 15 décembre 2014 Dernière intervention - 30 oct. 2013 à 12:13
Je pense que nous sommes parti sur un quiproquo.
En fait j'écris ma formule VBA comme tu me l'as conseillé, seulement c'est $12:$12 qui apparaît au lieu de la cellule définie grâce à "L;no_ligne"
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionContributeurStatut 13 septembre 2017 Dernière intervention - 30 oct. 2013 à 12:17
Peux tu, pour plus de clarté, nous donner :
1- ta formule telle qu'elle doit être inscrite dans la feuille Excel (avec un x à la place du numéro de ligne variable)
2- ton adaptation en VBA de cette dite formule.
Commenter la réponse de Kusco
Kusco 472 Messages postés vendredi 4 janvier 2008Date d'inscription 15 décembre 2014 Dernière intervention - 30 oct. 2013 à 12:21
0
Merci
Je viens de voir mon erreur, merci pour tout !

La formule de base était donc :
=DATEDIF(Lx;AUJOURDHUI();"y")&" Ans "&DATEDIF(Lx;AUJOURDHUI();"ym")&" mois"


Et pour fonctionner il faut placer en VBA :
<code>Cells(no_ligne, 13).FormulaLocal = "=DATEDIF(L" & no_ligne & ";AUJOURDHUI();""y"")&"" Ans "" &DATEDIF(L" & no_ligne & ";AUJOURDHUI();""ym"")&""mois"""

Cela fonctionne à merveille, merci !
Commenter la réponse de Kusco

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.