Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

report calcul dans userform

O

olivierd

Guest
bonjour cher(e ) lecteur (rice ),

j'utilise une boite de dialogue pour reporter des données dans ma feuille Excel
et il m'arrive de saisir des données de type =100-10
et l'information reportée reste =100-10
au lieu du "90" attendu

Pourriez-vous me dire pourquoi et comment y remédier ( si c'est votre jour de bonté, of course )

cordialement
 
Y

Yeahou

Guest
Re bonjour Olivier

un exemple de ce que cela peut donner avec l'événement change.
tu peux simuler une erreur standard avec

=90-10)*1


A+
 

Pièces jointes

  • Classeur1.zip
    12 KB · Affichages: 41
  • Classeur1.zip
    12 KB · Affichages: 32
  • Classeur1.zip
    12 KB · Affichages: 31
O

Olivierd

Guest
re-bonjour,
J'ai une erreur de compil avec le code, j'ai du mal comprendre...
( nota, j'ai vérifié dans le dico VBA Mac qui gère Replace et Exit Sub )

Voila ce que j'ai recopié:

'permet la saisie d'une formule dans le champ SalaireSDTC
.Range("F63").FormulaR1C1 = SalaireSDTC
On Error GoTo Gere_Erreurs
.Range("F63").Value = .Range("F63").Value
On Error GoTo 0

Exit Sub
'Gère le remplacement d'une virgule par un point dans le champ SalaireSDTC
Gere_Erreurs:
usfSaisie.SalaireSDTC = Replace(usfSaisie.SalaireSDTC, ",", ".")
MsgBox "Erreur numéro " & err & " interceptée !" & Chr$(10) & "Type d'erreur : " & Error(err) & Chr$(10) & "Correction de formule pour les virgules", vbOKOnly + vbInformation, Title:="Erreur détectée"
End Sub


Cordialement

A+
 
Y

Yeahou

Guest
Re Bonjour Olivier

tu peux remplacer replace par

Dim Chaine As String, Compteur As Integer
Chaine = UserForm1.TextBox1
Do
Compteur = InStr(1, Chaine, ",", 1)
If Compteur > 0 Then Chaine = Left(Chaine, Compteur - 1) & "." & Right(Chaine, Len(Chaine) - Compteur)
Loop Until Compteur = 0
UserForm1.TextBox1 = Chaine

c'est un peu plus lent, mais le fonctionnement est identique et cela devrait être compatible, ces instructions existant déja sous excel97.

A+
 
Y

Yeahou

Guest
j'ai oublié le fichier de test à jour

A+
 

Pièces jointes

  • Classeur1.zip
    13.2 KB · Affichages: 17
  • Classeur1.zip
    13.2 KB · Affichages: 17
  • Classeur1.zip
    13.2 KB · Affichages: 13
O

Olivierd

Guest
re-bonjour,
<voix de desespéré>
Le fichier de test ne fonctionne pas sous Mac et parfaitement sous Windows

J'ai remplacé sans succès:

Exit Sub
'Gère le remplacement d'une virgule par un point dans le champ SalaireSDTC
Gere_Erreurs:
usfSaisie.SalaireSDTC = Replace(usfSaisie.SalaireSDTC, ",", ".")
MsgBox "Erreur numéro " & err & " interceptée !" & Chr$(10) & "Type d'erreur : " & Error(err) & Chr$(10) & "Correction de formule pour les virgules", vbOKOnly + vbInformation, Title:="Erreur détectée"
End Sub

par:

Exit Sub
'Gère le remplacement d'une virgule par un point dans le champ SalaireSDTC
Gere_Erreurs:
Dim Chaine As String, Compteur As Integer
Chaine = usfSaisie.usfSaisie.SalaireSDTC
Do
Compteur = InStr(1, Chaine, ",", 1)
If Compteur > 0 Then Chaine = Left(Chaine, Compteur - 1) & "." & Right(Chaine, Len(Chaine) - Compteur)
Loop Until Compteur = 0
usfSaisie.usfSaisie.SalaireSDTC = Chaine
End Sub
 
Y

Yeahou

Guest
Re

Reessaye avec ce fichier test (j'ai mis les points sur les i dans le code) sous mac et précise l'erreur si il y en a encore une.

A+
 

Pièces jointes

  • Classeur1.zip
    11.8 KB · Affichages: 15
  • Classeur1.zip
    11.8 KB · Affichages: 11
  • Classeur1.zip
    11.8 KB · Affichages: 14
O

Olivierd

Guest
re,

yeeepi: plus d'erreur dans le fichier test !

donc je maintiens ( avec des points sur les i ? ):

Exit Sub
'Gère le remplacement d'une virgule par un point dans le champ SalaireSDTC
Gere_Erreurs:
Dim Chaine As String, Compteur As Integer
Chaine = usfSaisie.usfSaisie.SalaireSDTC
Do
Compteur = InStr(1, Chaine, ",", 1)
If Compteur > 0 Then Chaine = Left(Chaine, Compteur - 1) & "." & Right(Chaine, Len(Chaine) - Compteur)
Loop Until Compteur = 0
usfSaisie.usfSaisie.SalaireSDTC = Chaine
End Sub

cordialement

A+
 
O

Olivierd

Guest
bonsoir,
Désolé... mais je ne m'en sort pas même avec l'exemple.
Je pense avoir calqué ta méthode en renommant mon userform et mon textbox
mais dès que je tente de saisie qqchose dans le textbox, j'ai une alerte ( bibliotheque introuvable... )

Dans le fichier test: tu utilises un code dans l'instruction du bouton de validation "CommandButton1_Click()"
et un autre pour "TextBox1_Change(); c'est peut-être ce dernier point qui ne s'adapte pas à mon Userform ( qui contient de multiples champs ) ?

Désolé d'être aussi nul

cordialement
 
Y

Yeahou

Guest
Re Olivier

pour que cela fonctionne dans ton fichier:

dans ta dernière procédure, tu as écrit plusieurs fois
usfSaisie.usfSaisie.SalaireSDTC
il faut écrire en fait
usfSaisie.SalaireSDTC
quand tu mets deux fois usfsaisie (usfSaisie.usfSaisie), cela provoque une erreur car l'objet usfsaisie ne posséde pas d'objet lié usfsaisie mais un objet SalaireSDTC

la procédure CommandButton1_Click du fichier test équivaut à btnValidation_Click dans ton fichier

la procédure TextBox1_Change du fichier test équivaut à SalaireSDTC_Change dans ton fichier

ce sont des procédures événementielles qui doivent être stockées dans le code du userform et qui doivent porter le nom de l'objet.
dans le code du userform tu as en haut deux combobox qui te permettent de voir et créer les procédures événementielles possibles

pour ton problème de compatibilité il vient du fait que sous mac, il faut préciser un peu plus, cela me rappelle d'anciennes versions.
autrement dit
Chaine = usfSaisie.SalaireSDTC
ne passe pas alors que
Chaine = usfSaisie.SalaireSDTC.value
passe sans problème d'oû les points sur les I
maintenant qu'on a trouvé le problème, tu peux re essayer le replace sous la forme
usfSaisie.SalaireSDTC.Value = Replace(usfSaisie.SalaireSDTC.Value, ",", ".")
peut être qu'il passera.

si tu ne t'en sort pas, mets le code intégral du bouton.

A+
 
O

Olivierd

Guest
bonjour Yeahou, le forum,

merci pour tes explications
je pense ne plus avoir de doublons et j'ai re-essayé sans succès usfSaisie.SalaireSDTC.Value = Replace(usfSaisie.SalaireSDTC.Value, ",", ".") ( :blocage sur "replace"...

Je te soumet le code utilisé en pièce jointe ( sur lequel j'essaie d'intervenir ponctuellement et qui doit être une " usine à gaz à tes yeux... )

Cordialement

Olivierd
 

Pièces jointes

  • code-rtf.zip
    3.2 KB · Affichages: 12
Y

Yeahou

Guest
Bonjour olivier

ci joint le code modifié selon le principe du fichier test et qui devrait fonctionner sous mac.
1-les virgules sont remplacées par des points en live lors de la saisie
2-si il y a au final une erreur de formule (formule non valide), on prévient l'utilisateur et lui redonne la main pour corriger.

Bon Week end
 

Pièces jointes

  • Code_corrige.zip
    3.4 KB · Affichages: 19
O

Olivierd

Guest
bonjour,
(je hais les mac)
malheureusement, en ayant copié, collé le code, je bloque (semble-t-il) sur Chr du MsgBox puis sur Private Sub SalaireSDTC_Change()
avec ou sans saisie sur le texbox...
Cordialement
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…