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 ). Blague à part, il s'agit d'une manipulation anodine de ma part mais je ne la vois pas.

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 Sub

De 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 Sub

Et 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 Sub

Remplacer 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 Sub

Puis 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 Sub

Cordialement

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 Sub

Et l'erreur survient à nouveau ici:

->

Derligne = ActiveSheet.Range("I155").End(xlUp) + 1

Erreur 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

Rechercher des sujets similaires à "erreur macro format formulaire"