Erreur Macro + Format cellules formulaire
Bonjour à tous,
Je viens vous voir pour un double problème. Dans le fichier en annexe, j'ai un problème dans l'exécution d'une macro liée au formulaire "ajouter facture" dans la feuille "Exemple". Point intéressant: celle-ci semblait fonctionner hier soir avant que j'aille me coucher (sans doute encore un coup de malfaisants nocturnes, les mêmes qui planquent vos clés de voiture ou votre portable pendant la nuit
Lorsque je l'exécute, le debogage me renvoie dans la macro et me souligne l'erreur suivante (---->Derligne....):
Private Sub CommandButton1_Click()
Dim ctrl As Control
Dim Colonne As Integer
Dim Derligne As Integer
'Derligne devient la ligne qui suit la dernière valeur du tableau
------> Derligne = ActiveSheet.Range("I155").End(xlUp) + 1
'Balaye les controls 1 par 1 avec le For...Next
For Each ctrl In UserForm1.Controls
'La valeur de "colonne" est égale à la valeur du tag de Controle
Colonne = Val(ctrl.Tag)
'Si la valeur du tag>0 l'intersection n'° de derligne et le n° de colonne
'est une cellule qui contiendra la valeur "ctrl" cad celle dans contenu dans le Control
If Colonne > 0 Then ActiveSheet.Cells(Derligne, Colonne) = ctrl
'Next -> on passe au contrôle suivant
Next
End
End SubDe plus, je me suis aperçu que via le formulaire, les formats des cellules cibles n'étaient plus respectés ( €, dd/mm/yyyy), ce qui est problématique dans le cas de la date car celle-ci conditionne normalement une formule liée aux dates. La non-reconnaissance du bon format (ou le non respect du format cible) la rend inopérante.
Merci d'avance pour vos lumières
Lachdanan
Bon, j'ai retravaillé la macro (enfin, retravailler est un grand mot, j'ai juste supprimé les espaces inutiles entre les lignes) et ça marche. Quoi ? Pourquoi ? Comment ? J'en sais rien mais pour le moment, elle est fonctionnelle.
Il ne me reste que le format qui est problématique.
Edit: en fait, je découvre un autre problème.
Sur toutes les pages (excepté "accueil"); il existe 2 boutons: l'un permettant provenant d'un formulaire "Courrier", l'autre provenant d'un formulaire "Facture". Lorsque je remplis une facture, les champs s'affichent parfaitement mais lorsque je remplis un courrier juste après, il m'efface les champs "Objet" et "Montant" de la facture précédente.
Help ?
Bonjour,
Pour uniformiser les textbox saisie de date, personnellement les codes :
Pour ne pouvoir saisir que des chiffres :
Private Sub NONDUTEXTBOX_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End SubEt un masque de saisie pour ne pas à avoir à taper les /
Private Sub NONDUTEXTBOX_Change()
Dim val As Byte
'On limite le nombre de caractère dans le textbox
NONDUTEXTBOX.MaxLength = 10
val = Len(NONDUTEXTBOX)
If val = 2 Or val = 5 Then NONDUTEXTBOX = NONDUTEXTBOX & "/"
End SubRemplacer le NOMDUTEXTBOX par le nom du textbox utilisé bien-sûr.
Si ça peut t'aider ...
Cordialement
Bonjour Civo et merci pour ta réponse.
Pourrais-tu juste me dire à quel niveau de la macro reprise dans mon msg initiale, je dois rentrer ces lignes de code (chiffres et masques) ? Ou peut-être puis-je l'indiquer ailleurs ?
Mes compétences ne sont pas bien grandes, je le crains.
Re,
Donc tu vas dans ton userform1, tu fais un click droit sur le textbox 5 et tu colles le masque de saisie dans ton cas ça devrait ressembler à ça :
Private Sub TextBox5_Change()
Dim val As Byte
'On limite le nombre de caractère dans le textbox
TextBox5.MaxLength = 10
val = Len(TextBox5)
If val = 2 Or val = 5 Then TextBox5 = TextBox5 & "/"
End SubPuis juste en dessous tu colles le code Blocage saisie de lettres :
Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End SubCordialement
Civo a écrit :Re,
Donc tu vas dans ton userform1, tu fais un click droit sur le textbox 5 et tu colles le masque de saisie dans ton cas ça devrait ressembler à ça :
Super, ça marche à ce niveau (du moins le masque et les chiffres dans la textbox5). Merci beaucoup
Par contre, je ne sais pas si cela fonctionne dans les faits: je reçois à nouveau l'erreur que je mentionnais au début:
Voici le code fraîchement complété grâce à ton aide:
Private Sub CommandButton1_Click()
Dim ctrl As Control
Dim Colonne As Integer
Dim Derligne As Integer
Derligne = ActiveSheet.Range("I155").End(xlUp) + 1
For Each ctrl In UserForm1.Controls
Colonne = val(ctrl.Tag)
If Colonne > 0 Then ActiveSheet.Cells(Derligne, Colonne) = ctrl
Next
End
End Sub
Private Sub TextBox5_Change()
Dim val As Byte
'On limite le nombre de caractère dans le textbox
TextBox5.MaxLength = 10
val = Len(TextBox5)
If val = 2 Or val = 5 Then TextBox5 = TextBox5 & "/"
End Sub
Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End SubEt l'erreur survient à nouveau ici:
->
Derligne = ActiveSheet.Range("I155").End(xlUp) + 1Erreur 13: incompatibilité de type
Bonjour,
Lorsque je remplis une facture, les champs s'affichent parfaitement mais lorsque je remplis un courrier juste après, il m'efface les champs "Objet" et "Montant" de la facture précédente.
Dans ton Userform2 utilisé pour la saisie des courriers, il y a des TextBox non apparents dont 2 qui portent les tags 9 et 10.
Ce sont eux qui effacent les saisies de l'objet et du montant dans la partie "Factures".
A+
Essaie avec
Derligne = ActiveSheet.Range("I155").End(xlUp).Row + 1
A+
Tiens,
Te reste les masques de saisie à faire ...
Cordialement
frangy a écrit :Bonjour,
Lorsque je remplis une facture, les champs s'affichent parfaitement mais lorsque je remplis un courrier juste après, il m'efface les champs "Objet" et "Montant" de la facture précédente.
Dans ton Userform2 utilisé pour la saisie des courriers, il y a des TextBox non apparents dont 2 qui portent les tags 9 et 10.
Ce sont eux qui effacent les saisies de l'objet et du montant dans la partie "Factures".
A+
Essaie avec
Derligne = ActiveSheet.Range("I155").End(xlUp).Row + 1
A+
Merci pour les infos. J'ai du détaggé les TextBox car je ne trouvais pas le moyen de les faire apparaître et donc de les supprimer. Pour le .Row, et bien, comment dire...
J'allais remonter un enième problème que Civo a réglé par lui-même dans le fichier joint qui, au passage, fonctionne admirablement.
Merci encore à vous deux.
Je fais encore quelques tests avant de marquer ce topic comme réglé.
A bientôt.
Lachdann
Petit retour:
Tous les soucis mentionnés plus haut sont réglés mais il reste 2 petits aspects problématique:
- En utilisant le code de Civo dans le userform1
Private Sub TextBox5_Change()
Dim val As Byte
'On limite le nombre de caractère dans le textbox
TextBox5.MaxLength = 10
val = Len(TextBox5)
If val = 2 Or val = 5 Then TextBox5 = TextBox5 & "/"
End Sub
Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
La valeur se formate correctement dans la cellule mais la formule en P13 et les MFC ne fonctionnent toujours pas directement: je dois rentrer dans la cellule, aller au bout de la date dans la barre de formule et ensuite "enter" pour voir le tout apparaître.
- Comment pourrais-je faire pour que tout ceci soit pris en compte directement ?
- Est-il possible d'obtenir le format "monétaire" dans le Textbox 2 (apparition du €) ?
Merci d'avance pour vos réponses
Edit: fichier joint