• Initiateur de la discussion Initiateur de la discussion philippe
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

philippe

Guest
Salut à toutes et à tous !

Je suis un peu un newbie en VBA

Dans une macro j'ai fait un truc qui ressemble à ça

libor_cap = 0.07
Worksheets("welcome").Range("libor_formula").Formula = "=IF(D" & Range("D15").Row & "+D" & Range("D16").Row & "<" & libor_cap & ",D" & Range("D15").Row & "+D" & Range("D16").Row & ",0.07)"

en somme j'affecte un nombre à virgule à une variable et souhaite l'utiliser pour créer une formule dans une spreadsheet.

Or, comme vous le constaterez ça ne passe pas, la cellule excel prend une valeur 0 à l'endroit ou je met libor_cap dans ma formule.

Je sais que les variables ont différents types mais je n'arrive à comprendre le probleme ici....

Que soit béni ce qui m'explique correctement la manipulation des chiffres à virgule.
 
Bonjour Philippe, le Forum

Je ne sais pas ce que tu veux obtenir, mais en ayant fait tourner ton code comme ceci :

Sub Test()
Dim libor_cap As Double '<<<< Déclaration pour Variable Numérique avec décimales

libor_cap = 0.07

&nbsp;&nbsp;With Worksheets("welcome")
&nbsp;&nbsp;&nbsp;&nbsp;.Range("libor_formula").Formula = _
&nbsp;&nbsp;&nbsp;&nbsp;"=IF(D" & Range("D15").Row & "+D" & Range("D16").Row & "<" & libor_cap & ",D" & Range("D15").Row & "+D" & Range("D16").Row & ",0.07)"
&nbsp;&nbsp;End With

End Sub


J'obtiens ceci dans la cellule nommée "libor_formula" :

=IF(D15+D16<0.07,D15+D16,0.07)

Et selon ce que j'ai dans les cellules "D15" & "D16" je me retrouve :
soit avec un total de 0.07 (condition non remplie)
soit avec l'addition de D15 et D16 (condition remplie)

On peut faire exactement la même chose sans faire écrire de formule comme ceci :

Sub Text2()
Dim libor_cap As Double
Dim LigneA As Byte
Dim LigneB As Byte

libor_cap = 0.07
LigneA = 15
LigneB = 16


&nbsp;&nbsp;With Worksheets("welcome")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If .Range("D" & LigneA) + .Range("D" & LigneB) < libor_cap Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Range("libor_formula") = .Range("D" & LigneA) + .Range("D" & LigneB)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Range("libor_formula") = libor_cap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;End With
End Sub

Mais je pense que ce que tu cherches est plus compliqué...

Bon Aprèm
@+Thierry
 
Salut Thierry,

Je te rassure je ne cherche pas compliqué (en tout cas pour le moment).

Le probleme est que même avec ta solution j'ai le retour d'une erreur type 1004.

Si seulement vba avait le même debog que php.. ce serait nettement plus simple.

Par contre si je mets

libor_cap = 20 (donc un nombre entier)

pas de prob, c'est une valeur décimale qui le fait boguer... même avec la spécification double ...
 
Re Bonjour Philippe,

L'erreur 1004 signifie "Application-Defined Error" ou "Object-Defined Error"

Elle se produit dans ton cas si, par exemple, tu n'as pas de Range nommée exactement "libor_formula"...

En tout cas je ne vois pas de raison d'une erreur 1004 sur les deux exemples que je t'ai donné ci-dessus. De plus l'erreur 1004 ne devrait pas se produire pour des Variables Numériques mal déclarées...

... Mais Sapristi !! Bon sangt mais c'est bien sûr, je travaille en version US avec paramétrage US aussi, donc pour moi pas de problème, mais pour toi, tu dois être en FR avec la Virgule en séparateur de décimales...

Essaies ceci

Sub Test3()
Dim libor_cap As Double

libor_cap = 0.07

&nbsp;With Worksheets("welcome")
&nbsp;&nbsp;&nbsp;.Range("libor_formuula").Formula = _
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"=IF(D" & Range("D15").Row & "+D" & Range("D16").Row & "<" & libor_cap & ",D" & Range("D15").Row & "+D" & Range("D16").Row & "," & libor_cap & ")"
&nbsp;&nbsp;End With

End Sub

En fait si tu envoie en texte, "0.07" c'est peut-être çà l'erreur 1004... Donc passe plutôt la Variable Directement comme en gras ci-dessus...

Pour le débugage VBA est équippé de pas mal d'outils, tel que le "pas à pas" (touche [F8]) ou encore les points d'arrêt (Toggle BreakPoint) et plein d'autres choses... (Il faut être curieux sur le menu "Debug"...)

Bonne Fin de Journée
@+Thierry
 
Bonjour Philippe, Thierry, le forum

pour ma part, j'ai essayé libor_cap en string et des adresses type r1c1 avec un nom "libor_formula" déclaré en A1, cela fonctionne bien.

Cordialement, A+

Sub Test4()
Dim libor_cap As String
Dim Row1 As Long, Row2 As Long
libor_cap = "0.07"
Row1 = 15
Row2 = 16
Worksheets("welcome").Range("libor_formula").FormulaR1C1 = _
"=IF(R" & Row1 & "C4+R" & Row2 & "C4<" & libor_cap & ",R" & Row1 & "C4+R" & Row2 & "C4," & libor_cap & ")"
End Sub
 
Yeahou, tu portes bien ton nom !

J'ai fait un petit mix de ce que tu proposes et ça donne :

Dim libor_cap As String
libor_cap = "0.07"
Worksheets("welcome").Range("libor_formula").Formula = "=IF(D" & Range("D15").Row & "+D" & Range("D16").Row & "<" & libor_cap & ",D" & Range("D15").Row & "+D" & Range("D16").Row & "," & libor_cap & ")"

Et ça marche !

Il faut tout de même avouer que passer un chiffre en string pour qu'il puisse être traité correctement, cela m'echappe ! arf.... windows quoi..(pardon pour les fans)

Merci à tous
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
908
Retour