Aide sur cette fonction , je n'y arrive pas
Bonjour,
Je me casse la tête mais je n'y arrive pas. Pouvez-vous m'aider s'il vous plait sur cette fonction
Public Function ConversE(Quoi) As Double
On Error Resume Next
Quoi = CDbl(Quoi)
If Err.Number <> 0 Then
Err.Clear
ConversE = Replace(CStr(Quoi), ",", ".")
Else
ConversE = Quoi
End If
End Function
Elle fonctionne super bien pour des calculs entre textbox genre : qvt3 = (ConversE(tot3) * ConversE(ttva1)) / 100
Et évite les erreurs cdbl quand le textbox est vide
le but final est, cet exemple :
Range(Sheets("Facturation").Range("B:B").Find(fnumfacture.Value, LookIn:=xlValues).Address).Select
ActiveCell.Offset(0, 17) = ConversE(qvt3)
ça marche super MAIS : Quand le textbox concerné est vide il me met dans la cellule de destination un : 0,00
c'est pas top, avec le nombre de textbox que j'aurais à traiter, je risque d'avoir plein de 0,00 dans ma base et ils vont apparaitre aussi lors de l'alimentation de mes textbox sur l'userform
Ma question :
Comment modifier cette fonction pour que quand la valeur du textbox est vide, (rien) pas de 0,00 ne soit mis dans la cellule de destination
genre un truc comme ça :
if textbox ou Quoi = "" then
cellule ou converse ou Quoi = ""
Merci de m'aider
Amicalement
Bonjour,
Tu pourrais tester ...
If Quoi ="" Then Exit Function
Merci pour la réponse
j'ai mis ta ligne un peut partout dans la function
ça ne marche pas
les textbox vides résultent des cellules avec 0,00
Une autre possibilité
Au début de la procédure lancée par un command button
Avec for each (je connais très peu comment utiliser cette fonction)
exemple :
for each ? = ""
? = pas cdbl ou value = ""
La procédure du bouton compte 505 lignes et renvois la valeur d'env 300 textbox, combobox, listbox, etc...
Tout fonctionne bien sans lenteur mais ce problème de 0,00 m'enerve vu la quantité de contrôles traités ça en fait des paquets de 0,00
La procédure est celle-ci
Private Sub enrfacture_Click()
If fnumfacture = "" Then
MsgBox "Vous devez sélectionner un numéro de facture"
Exit Sub
for each ?
?
sheets("Facturation").[B3].End(xlDown).Offset(0, 39) = ConversE(mcent1)
Sheets("Facturation").[B3].End(xlDown).Offset(0, 40) = ConversE(net1)
Sheets("Facturation").[B3].End(xlDown).Offset(0, 41) = ConversE(caut1)
Sheets("Facturation").[B3].End(xlDown).Offset(0, 42) = op1.Text
Sheets("Facturation").[B3].End(xlDown).Offset(0, 43) = ConversE(tot1)
etc...
Sheets("Facturation").[B3].End(xlDown).Offset(0, 300) = fnumdevis.Value
End Sub
Merci de continuer à m'aider
Je suis content, j'ai trouvé tout seul
C'était simple mais il fallait y penser
j'ai remplacé
sheets("Facturation").[B3].End(xlDown).Offset(0, 39) = ConversE(mcent1)
Sheets("Facturation").[B3].End(xlDown).Offset(0, 40) = ConversE(net1)
Sheets("Facturation").[B3].End(xlDown).Offset(0, 41) = ConversE(caut1)
Sheets("Facturation").[B3].End(xlDown).Offset(0, 42) = op1.Text
Sheets("Facturation").[B3].End(xlDown).Offset(0, 43) = ConversE(tot1)
par
On Error Resume Next
sheets("Facturation").[B3].End(xlDown).Offset(0, 39) = cdbl(mcent1)
Sheets("Facturation").[B3].End(xlDown).Offset(0, 40) = cdblnet1)
Sheets("Facturation").[B3].End(xlDown).Offset(0, 41) = cdbl(caut1)
Sheets("Facturation").[B3].End(xlDown).Offset(0, 42) = op1.Text
Sheets("Facturation").[B3].End(xlDown).Offset(0, 43) = cdbl(tot1)
Là MIRACLE ça marche super bien
en effet On Error Resume Next passe les erreurs cdbl et ne prend que des textbox contenant des valeurs cdbl ou autres (non vides) :
résultat :
- mes textbox vides = cellules vides
- il n'y a plus d'erreurs cdbl
je garde la function conversE qui reste très utile pour le calcul entre texbox mais pour la validation de mes textbox
je vais utilser dorénavant : On Error Resume Next + cdbl
Désolé, si pour vous c'est rien, mais pour moi "ça va me changer la vie"
Je suis
Dites moi si ma trouvaille vous a été utile