VBA - Ajout et Modification de ligne via listbox

Bonjour,

J'ai commencé la création d'un logiciel pour mon entreprise avec excel en VBA et j'aimerais savoir comment faire pour modifier une ligne de la listbox ou bien en créer une nouvelle ? J'ai ma listbox (UserForm "ListeClient") et le formulaire que je veux utiliser pour la création d'une nouvelle ligne (UserForm "NouveauClient"). La contrainte supplémentaire est que lors de la création d'une nouvelle ligne, par le biais du formulaire, j'aimerais que dans les colonnes A; N et O les formules soient reprises et dans les colonnes B et I les listes déroulantes.

SI jamais vous avez la solution serait il possible de m'expliquer comment faire ?

Je vous joins le fichier !

Merci d'avance !

84liste-client.xlsm (102.61 Ko)

Bonsoir,

Comme tu as créé un objet Tableau, tout ajout de ligne recopie automatiquement formules et listes de validation.

Pour créer une nouvelle ligne, il suffit de se positionner sur la dernière cellule en bas à droite du tableau et de presser la touche "TAB"

Au niveau de VBA, il faut utiliser cet objet. Ci-joint exemple à compléter

104liste-client1.xlsm (80.59 Ko)

Merci beaucoup ! Par contre j'ai un petit problème. Sur le fichier que tu m'as passé, mon userform "ListeClient" ne fonctionne plus; et lorsque je copie la formule de l'userform 'NouveauClient" sur mon fichier original, une erreur s'affiche :/

Je remet le lien du fichier original où j'ai "copier-coller" ta formule (et compléter pour que toutes les valeurs s'ajoute/se modifie dans mon tableau)

J'aimerais aussi savoir si du coup, lorsque que l'on est sur la page NouveauClient il était possible de reprendre toutes les informations de la ligne et les mettre sur le formulaire, lorsque l'on choisi un numéro de client ou une entreprise ?

Merci d'avance !

45liste-client.xlsm (103.95 Ko)

Bonjour,

ci-jointe proposition

133liste-client2.xlsm (106.99 Ko)

C'est exactement ce que je cherche ! Le seul problème maintenant (et après je pense que ce sera bon, j'espère !) c'est que lorsque je veux ajouter un nouveau client, le fichier bug et excel se ferme tout seul :/

Je viens de vérifier, en fait ton fichier marche très bien. Le problème se créé lorsque je veux ajouter le bouton sur l'userform "ListeClient", pour ajouter ou modifier les clients. Pour cela je veux que le bouton ouvre l'userform "NouveauClient", mais lorsque que j'ajoute le code NouveauClient.Show, tout bug lorsque je clique sur le bouton créé. Je vous met ici le lien du fichier du coup.

Merci d'avance

71liste-client2.xlsm (107.01 Ko)

Si ça peut vous aider pour vous orienter, j'ai essayer d'attribuer au second bouton accès dossier, qui n'est relié à rien pour l'instant, l'accès vers l'Userform "NouveauClient" et aucun problème. C'est dès lors que je créé un bouton sur l'UserForm "ListeClient", avec le même code, qu'un bug se créé. Je met le fichier en pièce jointe du coup.

Je précise aussi que lorsque que je lance l'UserForm "NouveauClient", tout se passe sans problème, c'est seulement lorsque je passe par l'Userform "ListeClient", que je clique sur le bouton pour ouvrir "NouveauClient" et que je veux créer un nouveau client, que l'erreur se produit.

86liste-client2-4.xlsm (129.46 Ko)

Votre problème vient de cette instruction :

ListBox1.RowSource = Feuil1.Range("'Liste Client'!$Q$2:$AE$8").Address(external:=True)

Votre ListBox s'affiche en fait via un lien avec votre tableau. Excel est très perturbé quand ce lien est mis en cause par l'ajout d'un nouveau client.

Il ne faut donc pas utiliser un lien mais charger les valeurs comme ceci

    With Sheets("Liste Client").ListObjects(1)
        Me.ListBox1.List = .DataBodyRange.Value
    End With

Je vous joins dans quelques instants la modification correspondante.

Bonjour thev.

Bonjour klaaus.

Une autre façon de travailler.

Avec des dictionnaires pour plus d'aisances.

Le filtre sur ton listbox fonctionne également différemment.

Merci Benoit pour ton idée. Malheureusement, je veux vraiment avoir un "logiciel" complet et donc une fois fini, ne plus passer par le classeur. Je vais essayer d'appliquer la méthode de Thev qui correpond mieux à ceux que je veux faire. Je n'ai cependant aucun doute sur le fait que ta méthode pourra convenir à d'autres personnes et donc les aider

Encore une fois, merci tout de même de m'avoir proposer ta méthode qui fonctionne tout aussi bien !

ci-jointe nouvelle version

68liste-client3.xlsm (131.84 Ko)
klaaus a écrit :

Merci Benoit pour ton idée. Malheureusement, je veux vraiment avoir un "logiciel" complet et donc une fois fini, ne plus passer par le classeur. Je vais essayer d'appliquer la méthode de Thev qui correpond mieux à ceux que je veux faire. Je n'ai cependant aucun doute sur le fait que ta méthode pourra convenir à d'autres personnes et donc les aider

Encore une fois, merci tout de même de m'avoir proposer ta méthode qui fonctionne tout aussi bien !

Je ne comprends pas ce que tu entends ne pas passer par le classeur ...

A aucun moment je ne passe par le classeur en lui même sauf pour récupérer et inscrire les données, ce qui est obligatoire.

Je n'utilise aucun calcul, même pour noter le numéro de client.

Je ne suis pas certain que tu as étudié ma proposition, ou peut-être les boutons sur la feuille t'ont embêté. Ils ne sont là que pour tester les macros au lieu de devoir ouvrir à chaque fois la première fenêtre.

Merci beaucoup Thev, ça fonctionne parfaitement !

Benoit : Lorsque je veux lancer l'UserForm, j'ai un message d'erreur qui s'affiche à chaque fois que je veux lancer un Userform. Je pensais donc qu'il fallait obligatoirement passer par les boutons que tu avais mis sur le classeur. Mais si normalement je suis censé pouvoir lancer les Userform même en passant par la première fenêtre, il doit donc y avoir un problème quelque part car j'ai l'erreur d'execution 91 qui s'affiche dès que je veux lancer "NouveauClient" (bouton de droite sur l'UserForm accueil) ou bien quand je veux lancer "ListeClient" en cliquant sur le bouton Fichier Client, le bouton à gauche de l'UserForm "Accueil".

C'était pour cela que je pensais ne pas utiliser ta solution, car avec ces bugs, j'étais obligé d'utiliser les deux boutons situés sur le classeur.

Il faut lancer la procédure depuis le module 2. Tu as deux procédures soit listClient soit newClient.

Tu peux rattacher ces procédures à tes boutons avec Call listClient ou Call newClient.

Ça me permet d'éviter de doubler l'enregistrement dans les dictionnaires.

D'accord, je vais essayer cette méthode aussi alors, ça m'en apprendra un peu plus sur la VBA !

En tout cas merci à vous deux

Le fichier quelque peu modifié.

. Fonctionne avec ton userform principal.

. Recherche en tapant directement dans le textbox, plus besoin d'appuyer sur Rechercher (qui ne sert plus maintenant)

. Quand tu crées ou modifie un client et que ta fenêtre Liste est ouverte, actualisation de la liste pour afficher les nouveaux clients

Je peux également te proposer une fonction pour vérifier les valeurs indispensables lors de la création d'un client.

Tu peux également limiter tes textbox à des caractères numériques par exemple (code postal, téléphone).

Merci ! J'ai regardé ton fichier et du coup, il y avait un bug sur la recherche ! Tu avais mis

j = Me.Criteres.ListIndex + 1

et du coup la recherche était décalé, mais en regardant le code, j'ai réussi à modifier ça et ça marche parfaitement Je vais garder cette fonctionnalité qui me permet de ne plus à avoir à cliquer sur rechercher et me permet d'avoir les résultats au fûr et à mesure !

Concernant les valeurs indispensables et le fait de limiter les textbox à des données numériques, je ne pense pas les utiliser ici, mais je suis curieux de connaître le code pour faire cela à l'avenir

Si tu as le temps, je suis donc preneur

Encore merci !

Voilà la version avec la vérification des contrôles lors de la création ou modification de client.

Tu peux modifier les contrôles à tester dans la fonction, également pour la couleur de fond.

Pour le numéro de téléphone, n'est accepté que les chiffres et ".".

La tabulation a été modifiée pour se déplacer plus facilement dans les différents contrôles.

Merci beaucoup ! Je vais essayer de m'inspirer de tout ça pour finir mon logiciel !

Rechercher des sujets similaires à "vba ajout modification ligne via listbox"