IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Remplissage d'un formulaire avec les données d'une Listbox - Excel VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai Avatar de kodyone
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2024
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2024
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Remplissage d'un formulaire avec les données d'une Listbox - Excel VBA
    Bonjour à tous je vous espère bien portant(es).
    Merci pour vos différentes contributions dans mes discussions passés. J'avoue que j'apprend beaucoup avec vous sur cet forum.
    Je reviens encore avec une préoccupation qui me casse le nez depuis il y'a maintenant 2 jours.
    J'ai créé un formulaire que je souhaite utilisé pour remplir trois feuilles avec des destinations différentes je veux dire. Actuellement je suis entrain de coder la procédure qui va alimenter la deuxième feuille mais le code que j'ai fait ne marche pas du coups je suis perdu.

    Veuillez trouvez ci-joint le code ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Private Sub btnEnregistrer_Click()
    'On Error Resume Next
    Dim DL As Integer
    Dim list_nombre As Integer
    Dim Ligne As Integer
    Dim LastRow As Integer
     
    list_nombre = Me.ListBox1.ListCount
    LastRow = Feuil5.Range("C21:G" & Application.Rows.Count).End(xlUp).Row + 1
     
    If Me.ListBox1.ListCount > 0 Then 'Contrôle si la liste n'est pas vide
        If MsgBox("Voulez-vous enregistrer cette liste de prestation ?", vbYesNo) = vbYes Then
            For Ligne = 0 To list_nombre - 1
     
            'Ajouter une nouvelle ligne dans notre registre de transaction
            Feuil7.ListObjects(1).ListRows.Add
     
            'Chercher la dernière ligne de notre registre de transaction
            DL = Feuil7.Range("A1048576").End(xlUp).Row
     
        'Ajouter tous les lignes de notre mémoire au régistre des transactions
            Feuil7.Range("B" & DL) = Me.NumCoupon.Value          'Numéro de coupon
            Feuil7.Range("C" & DL) = CDate(Me.TDate.Value)       'Date
            Feuil7.Range("F" & DL) = Me.TBeneficiaire.Value      'Bénéficiaire
            Feuil7.Range("G" & DL) = Me.TDescription.Value       'Description
     
     
            Feuil7.Range("A" & DL) = Me.ListBox1.List(Ligne, 0)  'code
            Feuil7.Range("D" & DL) = Me.ListBox1.List(Ligne, 1)  'Source
            Feuil7.Range("E" & DL) = Me.ListBox1.List(Ligne, 2)  'Compte
            Feuil7.Range("H" & DL) = Me.ListBox1.List(Ligne, 3)  'Entrées
            Feuil7.Range("I" & DL) = Me.ListBox1.List(Ligne, 4)  'Sorties
            'Next Ligne
    ' ==============================================
    ' =                                                                                                        
    ' =  C'est à partir du code ci-dessous je veux alimenter la feuille5 de mon   
    ' =  fichier. je vais aussi ajouter une capture de ma feuille                         
    ' =                                                                                                        
    ' ==============================================
     
    ' ' ' ' Remplissage du coupon Caisse
                    Feuil5.Range("C11") = CDate(Me.TDate.Value)
                    Feuil5.Range("F11") = Me.NumCoupon.Value
                    Feuil5.Range("D13") = Me.TBeneficiaire.Value
                    Feuil5.Range("D14") = Me.TDescription.Value
                    Feuil5.Range("B" & LastRow) = Me.ListBox1.List(Ligne, 1)      'Source
                    Feuil5.Range("C" & LastRow) = Me.ListBox1.List(Ligne, 2)      'Compte
                    Feuil5.Range("D" & LastRow) = Me.ListBox1.List(Ligne, 4)      'Sorties
            Next Ligne
            MsgBox ("L'enregistrement a été effectué")
     
            End If
    End If
    ThisWorkbook.Save
    Unload Me
    With Registre_Pr
    Créer_Lsv
    End With
    End Sub
    Nom : Capture.png
Affichages : 73
Taille : 32,6 Ko



    Merci d'avance et merci encore pour ce que vous avez déjà fait pour moi dans le passé!

  2. #2
    Membre éclairé Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 419
    Points : 659
    Points
    659
    Par défaut
    Hello,

    pour moi ça n'est pas clair...
    Qu'est-ce que c'est qui "ne marche pas" et ça devrait marcher comment ?

    Pour simplifier le travail des gens qui peuvent vous répondre et mieux comprendre, un fichier de test est plus agréable qu'une copie d'écran avec un bout de code, les 2 étant inexploitables.

    Un petit détail : à la ligne 10 il y a Range("C21:G" & Application.Rows.Count).End(xlUp).Row, pourquoi Range("A1048576").End(xlUp).Row à la ligne 20 ? ça manque de logique...
    Un autre en passant : Feuil7 ou 5 ou 42 n'est pas très significatif, vous ne pouvez pas donner des noms plus parlant (idem pour ListBox1) ?
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  3. #3
    Membre à l'essai Avatar de kodyone
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2024
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2024
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Nain porte koi Voir le message
    Hello,

    pour moi ça n'est pas clair...
    Qu'est-ce que c'est qui "ne marche pas" et ça devrait marcher comment ?

    Pour simplifier le travail des gens qui peuvent vous répondre et mieux comprendre, un fichier de test est plus agréable qu'une copie d'écran avec un bout de code, les 2 étant inexploitables.

    Un petit détail : à la ligne 10 il y a Range("C21:G" & Application.Rows.Count).End(xlUp).Row, pourquoi Range("A1048576").End(xlUp).Row à la ligne 20 ? ça manque de logique...
    Un autre en passant : Feuil7 ou 5 ou 42 n'est pas très significatif, vous ne pouvez pas donner des noms plus parlant (idem pour ListBox1) ?

    Salut a vous j'espère que vous allez bien?
    Merci beaucoup pour votre réaction à ma préoccupation.
    J'avais mis un commentaire dans le code à partir duquel ma préoccupation commençait. Je ne sais pas si j'ai bien écrit le code mais le code de la ligne 10 est sensé retrouvé la première ligne disponible de la destination des données.
    Le code de la ligne 20 ne concernait pas ma préoccupation, cette partie est bonne car elle n'a pas la même destination que celui de la ligne 10.
    Comme vous me l'avez suggéré, j'ai donc fait un fichier test dans le but que vous puissiez mieux voir la préoccupation .
    Merci encore.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre éclairé Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 419
    Points : 659
    Points
    659
    Par défaut
    Pas beaucoup plus clair , le fichier est incomplet donc impossible de tester.

    Vous utilisez mal la fonction Range(xxx).End(xlUp) (de la ligne 10), elle ne fonctionne que sur UNE seule colonne. Donc, soit vous utiliser la colonne B, C, D ou E mais pas une combinaison. https://learn.microsoft.com/fr-fr/of...xcel.range.end
    De plus, vous cherchez la dernière ligne entre la ligne 20 et 26 et vous partez du bas de la feuille alors qu'il y a des données à la suite de la ligne 26.
    Donc la ligne 10 devrait être LastRow = Feuil5.Range("C26").End(xlUp).Row + 1 à condition qu'il y ait TOUJOURS qqchose dans la colonne C.
    Vous faites une boucle For Ligne = 0 To list_nombre mais vous n'incrémentez pas LastRow (et les range suivants sont fixe), donc vous écrivez toujours au même endroit, donc je ne comprend pas bien pourquoi une boucle.

    Ensuite quelques questions d'ordre générales :
    Pourquoi travailler avec un affichage de 50% et agrandir les écrits et donc les cellules ?
    Pourquoi fusionner les cellules des colonne F et G ?
    Vous utilisez le codename des feuilles dans le VBA, ok, mais pourquoi ne pas renommer ce codename ? Idem pour ListBox1

    Bon courage pour la suite, parce que là ça part assez mal, à mon sens.
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  5. #5
    Membre à l'essai Avatar de kodyone
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2024
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2024
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Nain porte koi Voir le message
    Pas beaucoup plus clair , le fichier est incomplet donc impossible de tester.

    Vous utilisez mal la fonction Range(xxx).End(xlUp) (de la ligne 10), elle ne fonctionne que sur UNE seule colonne. Donc, soit vous utiliser la colonne B, C, D ou E mais pas une combinaison. https://learn.microsoft.com/fr-fr/of...xcel.range.end
    De plus, vous cherchez la dernière ligne entre la ligne 20 et 26 et vous partez du bas de la feuille alors qu'il y a des données à la suite de la ligne 26.
    Donc la ligne 10 devrait être LastRow = Feuil5.Range("C26").End(xlUp).Row + 1 à condition qu'il y ait TOUJOURS qqchose dans la colonne C.
    Vous faites une boucle For Ligne = 0 To list_nombre mais vous n'incrémentez pas LastRow (et les range suivants sont fixe), donc vous écrivez toujours au même endroit, donc je ne comprend pas bien pourquoi une boucle.

    Ensuite quelques questions d'ordre générales :
    Pourquoi travailler avec un affichage de 50% et agrandir les écrits et donc les cellules ?
    Pourquoi fusionner les cellules des colonne F et G ?
    Vous utilisez le codename des feuilles dans le VBA, ok, mais pourquoi ne pas renommer ce codename ? Idem pour ListBox1

    Bon courage pour la suite, parce que là ça part assez mal, à mon sens.

    Salut à vous .
    Merci pour votre grand soutien.
    Je vais répondre à vos question avant de vous signifier les difficultés rencontrées avec vos explications ci-dessus.

    1. Pourquoi travailler avec un affichage de 50% et agrandir les écrits et donc les cellules ?


    Je vais corrigé la mise en forme après le codage terminé

    1. Pourquoi fusionner les cellules des colonne F et G ?


    Pour dire vrai, je suis parti d'un ancien travail de depuis 2018 où j'étais encore un vrai débutant sur Excel donc la mise en forme n'était pas trop mon truc. Donc j'ai pris le fichier sans apporter d'amélioration à ce niveau. Merci pour la remarque , mais comme je l'ai dis les grandes mise en forme je vais le faire après le codage.

    1. Vous utilisez le codename des feuilles dans le VBA, ok, mais pourquoi ne pas renommer ce codename ? Idem pour ListBox1


    Pour la Listbox Oui je peux changer ça, pour les feuilles l'idée c'est de ne pas écraser le code une fois qu'on change le SheetName. Je ne sais pas si vous avez une alternative pour ça , ce serait un acquis pour mois. La dernière fois que j'ai essayé de le faire c'était au niveau de l'onglet Révision avec la protection de la structure du classeur mais certains codes avaient besoin ce déverrouillage donc je n'ai pas pu m'empêcher de ne plus l'utiliser. Certes c'est possible avec VBA mais je ne suis qu'un débutant en VBA.


    Maintenant que j'ai répondu aux questions voyons voir avec le souci.
    Dans ma ListBox, je peux avoir autant de ligne que je veux envoyer au niveau de la plage de ma feuille de coupon.
    Avec le code ci, ça n'envoi que les données de la dernière ligne.

    Si vous me comprenez, vous pouvez peut-être essayer sur le fichier exemple que j'ai envoyé .
    Merci d'avance

  6. #6
    Membre éclairé Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 419
    Points : 659
    Points
    659
    Par défaut
    Citation Envoyé par kodyone Voir le message
    Je vais corrigé la mise en forme après le codage terminé
    Grosse erreur (à mon humble avis) car vous allez vous rendre compte que certaines cellules ne sont pas au bon endroit et vous devrez modifier votre code

    Citation Envoyé par kodyone Voir le message
    Pour la Listbox Oui je peux changer ça, pour les feuilles l'idée c'est de ne pas écraser le code une fois qu'on change le SheetName. Je ne sais pas si vous avez une alternative pour ça
    Dans l'éditeur VBE, affichez la "Fenêtre propriétés" (touche F4) et vous pourrez changer le codename de la feuille sans changer le nom que verrons les utilisateurs

    Citation Envoyé par kodyone Voir le message
    Dans ma ListBox, je peux avoir autant de ligne que je veux envoyer au niveau de la plage de ma feuille de coupon.
    Avec le code ci, ça n'envoi que les données de la dernière ligne.
    Inpirez vous du code de remplissage de "Feuil7"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Feuil7.Range("B" & DL) = Me.NumCoupon.Value          'Numéro de coupon
            Feuil7.Range("C" & DL) = CDate(Me.TDate.Value)       'Date
            Feuil7.Range("F" & DL) = Me.TBeneficiaire.Value      'Bénéficiaire
            Feuil7.Range("G" & DL) = Me.TDescription.Value       'Description
     
     
            Feuil7.Range("A" & DL) = Me.ListBox1.List(Ligne, 0)  'code
            Feuil7.Range("D" & DL) = Me.ListBox1.List(Ligne, 1)  'Source
            Feuil7.Range("E" & DL) = Me.ListBox1.List(Ligne, 2)  'Compte
            Feuil7.Range("H" & DL) = Me.ListBox1.List(Ligne, 3)  'Entrées
            Feuil7.Range("I" & DL) = Me.ListBox1.List(Ligne, 4)  'Sorties
    dans celui ci vous avez remplacé les numéros de ligne par DL, faites pareil avec LastRow pour Feuil5 en incrémentant avec la variable Ligne

    Citation Envoyé par kodyone Voir le message
    Si vous me comprenez, vous pouvez peut-être essayer sur le fichier exemple que j'ai envoyé .
    Comme déjà dit : "le fichier est incomplet donc impossible de tester."
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

Discussions similaires

  1. Boucle avec les données d'une listbox
    Par Dixtit dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/05/2022, 10h06
  2. [MySQL] Remplir un champ de formulaire avec les données d une table de la bdd
    Par ale elprincepe dans le forum PHP & Base de données
    Réponses: 28
    Dernier message: 29/04/2019, 12h15
  3. [XL-2010] Remplir un userform avec les donnés d'une feuille.
    Par celthi dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/12/2014, 19h11
  4. [AC-2010] Ouvrir un formulaire avec les enregistrements d'une seule valeur
    Par philenull dans le forum VBA Access
    Réponses: 18
    Dernier message: 13/09/2013, 08h31
  5. Réponses: 2
    Dernier message: 25/07/2007, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo