Formulaire n'ayant pas le même comportement selon le lancement effectué

Bonjour,

tout d'abords je vous demanderais un peu d'indulgence, je débute dans le développement en VBA :)

j'ai créé un formulaire simple pour enregistrer de la donnée dans un classeur excel.

Quand je le lance à partir de la fenêtre VBA, les données s'enregistrent bien les unes en dessous des autres dans le tableau Excel.

Par contre, quand je le lance à partir d'un bouton sur ma feuille Excel

Sub Bouton1_Cliquer()
UserForm1.Show
End Sub

Le comportement est différent, la ligne s'écrit toujours au même endroit sans sauter de ligne au 2eme enregistrement....

Une idée ?

Merci d'avance

Bonjour,

Sans données confidentielles

Cordialement

9dev-bruno.xlsm (41.23 Ko)

Ok. Je vois en fait lorsque vous cliquez sur votre bouton placé sur la feuille Départ, la ligne pris en compte par le code "CommandButton1_Click dans l'instruction ci-dessous renvoie la ligne dans la feuille Départ (donc toujours la ligne 2 !)

ligne = Cells(Rows.count, 1).end(xlup).row + 1

Modifiez votre ligne comme ceci

ligne = Feuil2.Cells(Feuil2.Rows.count, 1).end(xlup).row + 1

Autre chose : En voyant votre fichier, il y aurait des choses à modifier. Notamment utiliser les tableaux structurés et éviter les RowSource. (à éviter ! cette fonction qui peut être source d'erreur si mal utilisée dans les codes). Préfèrez lui toujours l'instruction ADDITEM ou éventuellement LIST.
Si c'est bien votre vrai fichier, je peux l'adapter à ces propositions si cela intéresse.

Cordialement

Merci ça fonctionne.

étant en apprentissage sur le domaine je serais intéressé par la modification sur mon support.

Merci

Votre fichier en retour avec une explication ci-dessous afin que vous compreniez ce que j'ai modifié :

1. Feuille Menu --> Mise en tableau structuré de chacune des colonnes comme ceci :
a. Sélectionner des données de la colonne (exemple pour Type matériel --> A1 à A7)
b. Dans le menu excel Accueil, cliquer sur l'icone "Mettre sous forme de tableau"
c. Sélectionner un tableau dans les choix offerts (j'ai utilisé "moyen")
d. Cocher la case "Mon tableau à des entêtes" puis OK
e. Aller dans "Formules" --> "Gestionnaire de noms"
f. Renommer le tableau créé par un nom de votre choix (pour notre exemple, j'ai choisi le nom "TabTypeMateriel"
g. Refaire les mêmes opérations pour chaque colonne

2. Feuille chaine

a. Sélectionner des données --> A1 à R2
b. Refaire les opérations b à f décrites au point 1 ci-dessus. Le tableau est nommé --> "TabDevis"

3. Userform
J'ai modifié la Private sub Initialize pour l'adapter aux tableaux structurés et noms créés

rem :
Pour ajouter des données dans la feuille Menu, il vous suffit d'ajouter après la dernière ligne. Le tableau et son nom seront adaptés automatiquement
Pour supprimer une ligne (par exemple dans la feuille Chaine), vous devez toujours procéder comme ceci (Très important !!! ) :
- Sélectionner la ligne dans les colonnes du tableau. Donc ici de A2 à R2 (ne jamais sélectionner la ligne 1)
- Click droite sur la ligne à supprimer
- Choisir "Supprimer" --> "Lignes de tableau"

Si ok pour vous, je vous donnerai le code adapté à utiliser pour le bouton Valider ( à modifier pour adapter au tableaux structurés)

Cordialement

11dev-bruno2.xlsm (44.84 Ko)

c'est super merci beaucoup.

Ca me fait avancé énormément.

Génial

Voici la partie de code à modifier pour votre bouton Valider jusque la mention --> "Après insertion....."

Private Sub CommandButton1_Click()
Dim ligne As Integer

With Feuil2.ListObjects("TabChaine")
'Numéro de ligne de la première cellule vide de la colonne 1 en partant du bas de la feuille
    If .ListRows.Count = 0 Then
        .ListRows.Add: ligne = 1
    Else: .ListRows.Add: ligne = .ListRows.Count
    End If

    With .DataBodyRange
        'Insertion des valeurs sur la feuille
        .Item(ligne, 1) = "Elingue chaîne"
        .Item(ligne, 2) = TXTDATE
        .Item(ligne, 3) = NPLAQUECONT
        .Item(ligne, 4) = NPLAQUE
        .Item(ligne, 5) = REFC
        .Item(ligne, 6) = ComboBrin
        .Item(ligne, 7) = ComboDiam
        .Item(ligne, 8) = ComboCrochet

        If CheckBox1.Value = True Then 'Si coché
                .Item(ligne, 9) = "Oui"
            Else 'Si décoché
                .Item(ligne, 9) = "Non"
            End If
        .Item(ligne, 10) = ComboGrade
        .Item(ligne, 11) = TBLGUTILE
        .Item(ligne, 12) = TBLGCHAINE

        If CheckBox2.Value = True Then 'Si coché
                .Item(ligne, 13) = "Oui"
            Else 'Si décoché
                .Item(ligne, 13) = "Non"
            End If

        If CheckBox3.Value = True Then 'Si coché
                .Item(ligne, 14) = "Oui"
            Else 'Si décoché
                .Item(ligne, 14) = "Non"
        End If
        .Item(ligne, 15) = TBCOM

        If CheckBox4.Value = True Then 'Si coché
                .Item(ligne, 16) = "Oui"
            Else 'Si décoché
                .Item(ligne, 16) = "Non"
        End If

        If CheckBox5.Value = True Then 'Si coché
                .Item(ligne, 17) = "Oui"
            Else 'Si décoché
                .Item(ligne, 17) = "Non"
        End If

        If CheckBox6.Value = True Then 'Si coché
                .Item(ligne, 18) = "Oui"
            Else 'Si décoché
                .Item(ligne, 18) = "Non"
        End If
    End With
End With

'Après insertion, réinitialisation du formulaire

Cordialement

Ca marche très bien merci

Bonjour,

sur un autre formulaire, je réitère la même chose pour les listes déroulantes, et j'ai un message

Erreur d'éxécution 9, l'indice n'appartient pas à la sélection...

Seul le ComboCable fonctionne....

Mon code est le suivant :

Private Sub UserForm_Initialize()
ComboCable.List = Feuil1.ListObjects("Diamcable").DataBodyRange.Value
ComboNature.List = Feuil1.ListObjects("Nature2").DataBodyRange.Value
ComboNATCABLE.List = Feuil1.ListObjects("Type_cable").DataBodyRange.Value

End Sub

Merci

Bonjour,

En premier je vérifierais les noms Listobjects (orthographe, majuscules, ....) et qu'ils soient bien renseignés dans le gestionnaire de noms

Sinon mettez le fichier en ligne ( sans données sensibles). Je regarderai

Cordialement

J'ai supprimer et refait tous les tableaux de choix, et cela fonctionne.

Cependant, j'ai une autre question si je peux me permettre.

Quel serait le code pour envoyer par mail (en appuyant sur un bouton) les feuilles Excel remplies par les formulaires ?

merci

Quel serait le code pour envoyer par mail (en appuyant sur un bouton) les feuilles Excel remplies par les formulaires ?

Quel programme utilisez-vous à cette fin ?

Le bouton serait sur la feuille concernée ?

J'utiliserais le programme Outlook avec un bouton dans le classeur sur ma page d'acceuil.

Les feuilles à envoyées seraient

Feuil1, Feuil2, Feuil3

Un exemple à adapter avec ce lien -> https://forum.excel-pratique.com/s/goto/131209

Merci, mais je n'arrive pas à adapter le code pour qu'il m'envoi feuil1 et Feuil2.

Vous devez sélectionner les feuilles dans un nouveau fichier puis le mettre en attachment

Dans le code du lien proposé , remplacez

ThisWorkbook.ActiveSheet.Copy

par

ThisWorkbook.Sheets(Array(1, 2, 3)).Copy

1,2 et 3 correspondent aux trois premières feuilles dans votre fichieer

Cordialement

Super, merci

Rechercher des sujets similaires à "formulaire ayant pas meme comportement lancement effectue"