Userform bug '13' incompatibilité type

Boujours le forum,

je suis en train de "crée" un userform en suivant à peut près le tuto du site, sauf que j'ai beau cherche je ne trouve pas mon erreur là dedans:

Private Sub ComboBox_etat_Change()

End Sub

Private Sub CommandButton_annuler_Click()
    Unload Me
End Sub

Private Sub CommandButton_enregistrer_Click()
    Dim ligne_insertion As String
    If TextBox_denot.Value = "" Then
    dd = MsgBox("au moins le champs Denot doit etre compl?ter", 0, "Erreur")
    Else
 ligne_insertion = Sheets("NEW").Range("A1").End("A65").Row 'le curseur s'arrête ici'

    Sheets("New").Cells(ligne_insertion, 1) = "textebox_demandeur.Value"
    Sheets("New").Cells(ligne_insertion, 2) = "textebox_notice.Value"
    Sheets("New").Cells(ligne_insertion, 3) = "textebox_langue_source.value"
    Sheets("New").Cells(ligne_insertion, 4) = "textebox_langue_cible.Value"
    End If
End Sub

Private Sub UserForm_Initialize()
    etat = Array("trad en cour", "traduit")
    For i = 0 To UBound(etat)
    ComboBox_etat.AddItem etat(i)
    Next
End Sub

Salut Soma,

Quand tu cliques sur le débogage, quelle ligne s'affiche ?

Bonjour,

En déclarant Dim ligne_insertion As Integer plutôt que String.

Et ligne_insertion = Sheets("NEW").Range("A1").End(xldown).Row

?

oyobrans j'ai essayer ta méthode sauf que ça ne change rien le débogage s'arrette là:

ligne_insertion = Sheets("NEW").Range("A1").End("A65").Row

baboutz

Il faut que tu remplaces End("A65") par End(xldown).

c'était mon premier essais mais meme avec cette fontion ça me marque la ligne en erreur

ligne_insertion = Sheets("NEW").Range(A1).End(xlDown).Row

sauf que le message a changé, "erreur définis par l'application ou l'objet"

Range(A1)

A remplacer par :

Range("A1")

Tu as oublié les guillemets !

c'était ça merci, mais ta une idée de ce pourquoi mon code marche pas ? Sortout que je n'ai même pas de debogage

Private Sub CommandButton_annuler_Click()
    Unload Me
End Sub

Private Sub CommandButton_enregistrer_Click()
    Dim ligne_insertion As Integer
    If TextBox_denot.Value = "" Then
    dd = MsgBox("au moins le champs Denot doit etre compl?ter", 0, "Erreur")
    Else
    ligne_insertion = Sheets("NEW").Range("A1").End(xlDown).Row

    MsgBox (ligne_insertion)

    'enregistrement des donn?es
    Sheets("NEW").Cells(ligne_insertion, 1) = textebox_demandeur.Value
    Sheets("NEW").Cells(ligne_insertion, 2) = textebox_notice.Value
    Sheets("NEW").Cells(ligne_insertion, 3) = CDate(textebox_date.Value)
    Sheets("NEW").Cells(ligne_insertion, 4) = textebox_langue_R?vision.Value
    Sheets("NEW").Cells(ligne_insertion, 5) = textebox_langue_source.Value
    Sheets("NEW").Cells(ligne_insertion, 6) = textebox_langue_cible.Value
    Sheets("NEW").Cells(ligne_insertion, 8) = textebox_langue_etat.Value
    Sheets("NEW").Cells(ligne_insertion, 13) = textebox_langue_denot.Value
    Sheets("NEW").Cells(ligne_insertion, 11) = textebox_num_devis.Value
    Sheets("NEW").Cells(ligne_insertion, 12) = textebox_CA.Value
    End If
    Unload Me
End Sub

Private Sub UserForm_Initialize()
    etat = Array("trad en cour", "traduit") 'liste deroulant etat'
        For i = 0 To UBound(etat)
        ComboBox_etat.AddItem etat(i)
        Next
    derni?re_ligne = Sheets("NEW").Range(A1).End(xlDown).Row
    denot_selectioner = activcells.Offset(0, -1)

        For ligne = 2 To derni?re_ligne 'remettre les info d?j? pr?sentes dans la bd'
            If Sheets("NEW").Cells(ligne, 13) = denot_selectioner Then
            textebox_demandeur.Value = Sheets("NEW").Cells(ligne_insertion, 1)
            textebox_notice.Value = Sheets("NEW").Cells(ligne_insertion, 2)
            textebox_date.Value = Sheets("NEW").Cells(ligne_insertion, 3)
            textebox_langue_R?vision.Value = Sheets("NEW").Cells(ligne_insertion, 4)
            textebox_langue_source.Value = Sheets("NEW").Cells(ligne_insertion, 5)
            textebox_langue_cible.Value = Sheets("NEW").Cells(ligne_insertion, 6)
            textebox_langue_etat.Value = Sheets("NEW").Cells(ligne_insertion, 8)
            textebox_langue_denot.Value = Sheets("NEW").Cells(ligne_insertion, 13)
            textebox_num_devis.Value = Sheets("NEW").Cells(ligne_insertion, 11)
            textebox_CA.Value = Sheets("NEW").Cells(ligne_insertion, 12)
            End If
        Exit For
        Next

End Sub

Avec un fichier, ça serait plus facile !

Je regarde ça en rentrant chez moi

en gros je veut faire un userform pour remplir chaque colonne du tableau sauf que certaine colonne sont (colonne g) un regroupement de plusieurs autre colonne. Du coup je voudrais que les info redondante que je mets dans un champs soit automatiquement rempli dans les autre champ (par ex que le code langue de "langue source" se rajoute au numéro "Notice" et "révision" pour former "référence et indice document")

PS: je n'ai pas Excel chez moi donc je pourrais voir les fichier que demain; et pourquoi je"remplace les caractère quand je suis sur le forum au lieu ajouter à la suite comme partout

Salut Soma,

Désolé je n'ai finalement pas pu hier soir.

Premièrement, je n'ai pas de UserForm dans le fichier que tu m'as envoyé, impossible de faire des tests

Ensuite j'ai repéré une erreur, remplace

denot_selectioner = activcells.Offset(0, -1)

Par :

denot_selectioner = ActiveCell.Offset(0, -1)

Enfin, pour la colonne G, il te suffis de faire :

Sheets("NEW").Cells(ligne_insertion, 7) = textebox_notice.Value & textebox_langue_cible.Value & textebox_langue_Révision.Value

D'ailleurs, je remarque que pour la première ligne, dans la colonne G la révision est "01" alors que dans la colonne D c'est "00", normal ou erreur ?

j'ai fait la correction mais j'ais toujours l'erreur.

Par contre pour les cellules qui se "combine" je ne peut pas afficher la référence directement dans une textbox pour laisser à 'utilisateur la possibilité de la modifié?

Si tu peux sans soucis ! Mais il faudrait pour cela que tu me donne le fichier avec l'UserForm afin que je corrige le problème et que je te montre comment faire

oups j'ai oublier de le mettre

Effectivement Soma, tu as fais beaucoup d'erreurs surtout niveau orthographique :

textbox_XX

à la place de

Textbox_XX

(Donc sans majuscule sur le "t" et le "b")

TexteBox_XX

à la place de

TextBox_XX

(Donc avec un e en trop)

Fait attention ! Copie/colle le nom de tes TextBox

Ensuite je t'ai mis ça :

Cela permet d'être sur d'avoir la date écrit comme nous français le souhaitons.

Private Sub TextBox_date_Change()

    'On autorise la saisie de 10 caractères maximum
    TextBox_date.MaxLength = 10

    'Quand la date ou le mois est inscrit, ajoute un "/"
    Dim Valeur As Byte
    Valeur = Len(TextBox_date)
    If Valeur = 2 Or Valeur = 5 Then TextBox_date = TextBox_date & "/"

    'Si la date est inscrite
    If Valeur = 10 Then

        'Si la date n'est pas valide alors met un message d'erreur et supprime le contenu de la TextBox_dateFinCFO
        If Not IsDate(TextBox_date) Then

            MsgBox "Veuillez entrer une date valide."
            TextBox_date.Value = ""

        End If

    End If

End Sub

Cela permet d'avoir le "/" qui se met automatiquement, et cela permet de vérifier que la date sois bonne (Par ex : 32/13/2019 -> impossible)

Private Sub TextBox_date_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    'On autorise uniquement la saisie des caractères "0123456789/"
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0

End Sub

Ici, on autorise que la saisie des chiffres 1234567890.

Private Sub TextBoxlangue_source_Change()

    TextBox_ref = TextBox_notice.Value & TextBoxlangue_source.Value & TextBox_Révision.Value

End Sub

Cela permet d'avoir la référence qui s'affiche automatiquement dans la TextBox référence.

Private Sub UserForm_Activate()

    'On déclare des variables
    Dim LargeurFenetre As Integer
    Dim HauteurFenetre As Integer
    Dim PositionGauche As Integer
    Dim PositionHaut As Integer

    'On récupère les dimensions de l'écran
    With Application

        LargeurFenetre = .Width
        HauteurFenetre = .Height
        PositionGauche = .Left
        PositionHaut = .Top

     End With

     'On positionne l'UserForm au centre de l'écran
     With Me

        .Left = (PositionGauche + LargeurFenetre) - ((LargeurFenetre + .Width) / 2)
        .Top = (PositionHaut + HauteurFenetre) - ((HauteurFenetre + .Height) / 2)

     End With

End Sub

Cela permet de positionner ton UF au milieu de l'écran.

Private Sub TextBox_langue_cible_Change()

    'On passe la saisie en majuscule
    TextBox_langue_cible.Text = UCase(TextBox_langue_cible.Text)

End Sub

Enfin j'ai également mis ça pour mettre en majuscule automatiquement le texte tapé.

Comme tu peux le voir, j'ai pris pas mal de libertés. A toi de changer/enlever ce qui ne te plaît pas

J'ai également mis le code ton UserForm_Initialize en commentaire, je ne savais pas à quoi il servait donc si tu en as besoin, n'oublie pas de le ré-activer.

Ton fichier :

8classeur-soma.xlsm (40.25 Ko)

PS : Le code de ton UserForm était dans ta feuille NEW, grosse erreur ! Double clique sur ton bouton enregistrer si tu veux accéder au code de celui-ci par exemple. Le code de ton UF est dans ton UF.

Tu as bien fais mon UF commence à ressembler à un outil mais c'est possible de faire une liste déroulante qui s'incrémente si l'utilisateur rentre un nouveaux champs?

Et ce que je voulais faire dans userform_initialize c'est si la ref existe que les info de la ligne se réinscrive dans UF =>https://www.excel-pratique.com/fr/formation/remplissage_userform.php

PS: merci pour les conseils

Bien sur que c'est possible ! Cherche un peu sur le net, tu devrais t'en sortir sans soucis

Reviens ici si tu as des difficultés.

Je ne comprend pas ce que tu veux faire avec ce que ce qui est expliqué dans le lien donné. Tu veux en gros, quand on fait la recherche d'une référence par exemple, on a toute les informations dans l'UF ?

En gros je voudrais que quand on cherche une ref et qu'elle existe toutes les info de la ligne se retrouve dans l'uf

Je te conseil de créer dans ce cas un multipage.

Première page : La page actuelle permettant d'ajouter de nouvelles données à la base de données.

Deuxième page : Similaire à la page actuelle mais avec une TextBox et un bouton rechercher en haut de la page pour chercher des infos qui viendront s'ajouter dans les TextBox ! Tu utiliseras la méthode find.

Attention à bien avoir un nom différent sur les TextBox de la seconde page !

Rechercher des sujets similaires à "userform bug incompatibilite type"