Modifier, supprimer données d'un tableau via formulaire

Bonjour, encore très novice en VBA, j'ai souvent besoin de faire appel au pro d'Excel.

Depuis plusieurs jours je "coince" sur le code de plusieurs boutons de commande de mon annuaire, en cour d'élaboration.

Cette annuaire regroupe les contacts dans un onglet nommé "Liste RH".

J'ai créé 3 formulaires :

- Un formulaire pour créer un contact;

- Un formulaire pour rechercher un contact;

- Un formulaire pour modifier supprimer un contact.

Si les deux premier ont été simple, le troisième me pose probleme, et notamment

les boutons "enregistrer" et "supprimer".

- Enregistrer qui permet de sauvegarder un modificatif d'un contact existant;

- Supprimer pour supprimer complètement la ligne d'un contact.

En pièce jointe mon fichier avec toute les commandes. et le code

Pourriez-vous me donner quelques orientations pour le code de mes deux boutons?

Vous remerciant par avance, je vos souhaite une bonne soirée.

Bonjour,

Un test qui m'a l'air fonctionnel en passant par le nommage des textbox en fonction des colonnes de ta liste RH.

J'ai supprimé la macro workbook_open je te laisserais la remettre car sinon c'est ingérable, de plus nous n'aimons pas ça ici. Je te laisse étudier le mécanisme et éventuellement l'adapter.

Cdlt,

94annuaire.xlsm (64.19 Ko)

Bonsoir Ergotamine,

Apres essai pour modifier : La modification agit sur un ligne sous celle sélectionnée dans la listbox;

Aucun résultat pour le bouton supprimé.

Je ne te suis pas dans ta réponse ("Un test qui m'a l'air fonctionnel en passant par le nommage des textbox en fonction des colonnes de ta liste RH")

Cordialement

Bonjour,

Ci-contre un autre essai. Je suis passé par la fonction match (=EQUIV sous Excel) pour retrouver la ligne à l'aide de son ID unique retrouvé dans la listbox car sinon, nous risquons de ne pas regarder sur la bonne ligne.

Pour la suppression c'est également OK. Attention cependant car tu supprimes la ligne entière, si le RH se trouve en ligne 2 ou 3 tu supprimes aussi ta formule NBVAL, je ne sais pas exactement à quoi elle sert.

Pour ce qui est des "en passant par le nommage des textbox en fonction des colonnes de ta liste RH" j'ai rennomé chaque textebox avec l'indice correspondant à la colonne de ton tableau liste RH. Par exemple la textebox contenant le prénom sera la textbox5 car le prénom se trouve en colonne 5. Ce qui me permet de boucler plus facilement via l'indice i dans le code, et donc de l'alléger.

Cdlt,

Bonjour Ergotime,

Merci de ton temps passé et de me donner quelques conseils.

J'ai passé ma matinée a renommer toute mes txtbox, combobox etc, faire un peu de tri dans mon code (virer ce qui ne sert pas) etc.

J'ai réussi à régler mon probleme d'ajout d'un contact avec son num attenant.

Je me suis rendu compte que mon probleme viens du fait que je n'arrive pas à me positionner sur la ligne correspondant au contact à supprimer ou à modifier.

Je jette un coup d'œil au fichier que tu m'envois, et te tiens au courant.

Encore merci a toi pour tous tes conseils. A bientôt

Cordialement.

Bonjour,

Qui trop embrasse, mal étreint ! Excel n'est pas un Gestionnaire de Base de données. Pour ce genre de travail voir du coté Access.

Pour une base de données standard pas besoin de 36 formulaires : Création, Recherche, Modification, Suppression, normalement, ça se passe sur le même formulaire... Voir par exemple ici .

Ou ça se gâte c'est si tu veux faire une recherche tous azimuts sur une base de donnée type Google. Les débutants n'hésitent devant rien, ils demandent fréquemment la Lune avant de retomber sur Terre. Si vraiment tu cherches l'âge du capitaine, pour une recherche de ce genre faire une recherche avec l'outil standard Excel. Sinon essaie de t'en tenir à la recherche par nom. Pour une base de données d'individus c'est la plupart du temps largement suffisant et on dispose déjà d'outils redoutablement efficaces...

Après il peut arriver qu'on veuille faire des extractions sur la ville, l'âge, ou autres sujets divers. Mais ça n'a rien à voir le formulaire Saisie, Recherche, Modification, Suppression... On est sur des problèmes de filtrage, de tri, d'extractions, de présentation... Il faut déconnecter ça de ton formulaire de gestion de la BD.

A+

Bonjour Galopin01, Ergotamine

Habituellement, pour mes besoins perso je "bricole" sur VB.net, et je me débrouille pas trop mal avec les BD.

Malheureusement, le fichier que je souhaite développer est pour une utilisation interne au travail. Ma boite n'a pas Access, et je ne souhaite pas passer l'ensemble de mon temps à coder. Je souhaite simplement faciliter la tenue et la mise à jour d'un petit annuaire aux personnes de mon service.

J'ai réussi avec l'aide de Ergotamine, a rendre utilisable le formulaire "Ajout" de contact.

Le bouton "supprimer" un contact est également opérationnel, toute la ligne du contact disparait du tableau.

Ce qui coince c'est le bouton "modifier", car je n'arrive pas à me positionner sur la ligne choisi dans ma listBox de mon formulaire. De fait rien ne ce passe ou la modification s'inscrit sur le premier enregistrement.

Ci-joint mon fichier pour plus de compréhension.

Si vous pouvaient m'aiguiller un peu.

Vous remerciant par avance.

Bon WE de Paques.

Cordialement.

81annuaire.zip (53.44 Ko)

Dlt n'est associé à rien...
Remplace ca par la variable Ligne

Feuil5.Range("G" & Ligne).Value = TxtBox_Fonction.Text

ça devrait ressembler à ça

Private Sub Cmd_Enregister_Click()
    Dim Dlt As Long
    Dim Ligne As Long
    Dim I As Integer
    If MsgBox("Confirmez-vous la modification ?", vbYesNo, "Confirmation de modification") <> vbYes Then Exit Sub
        Ligne = Me.ListBox1.ListIndex + 2
        Feuil5.Range("C" & Ligne).Value = TxtBox_Num.Text
        Feuil5.Range("D" & Ligne).Value = TxtBox_Civ.Text
        Feuil5.Range("E" & Ligne).Value = TxtBox_Prenom.Text
        Feuil5.Range("F" & Ligne).Value = TxtBox_Nom.Text
        Feuil5.Range("G" & Ligne).Value = TxtBox_Fonction.Text
        Feuil5.Range("H" & Ligne).Value = TxtBox_Rue.Text
        Feuil5.Range("I" & Ligne).Value = TxtBox_Code.Text
        Feuil5.Range("J" & Ligne).Value = TxtBox_Ville.Text
        Feuil5.Range("K" & Ligne).Value = TxtBox_TelDom.Text
        Feuil5.Range("L" & Ligne).Value = TxtBox_TelPro.Text
        Feuil5.Range("M" & Ligne).Value = TxtBox_TelMob.Text
        Feuil5.Range("N" & Ligne).Value = TxtBox_MailPro.Text
        Feuil5.Range("O" & Ligne).Value = TxtBox_MailPerso.Text
End Sub

Bonjour Mtek,

Je viens de modifier ma variable. Le résultat est identique, la modification apportée au contact s'inscrit sur la première ligne du tableau (bien que le contact choisi se trouve dans une autre ligne)

Merci a toi de prendre de ton temps

Cordialement;

Bonjour,

Dans la dernière version envoyée la modification, selon mes tests, fonctionne. Si vous ne souhaitez pas vous servir de la simplification de code je ne peux rien faire de plus désolé.

Bon WE à vous aussi.

Une autre proposition.

Private Sub Cmd_Enregister_Click()
    Sheets("Liste RH").Select
    Dim N As Long
    Dim X As Integer
    N = TxtBox_Num.Value
    X = Application.Match(N, Range("C:C"), 0)
    Feuil5.Range("D" & X).Value = TxtBox_Civ.Text
    Feuil5.Range("E" & X).Value = TxtBox_Prenom.Text
    Feuil5.Range("F" & X).Value = TxtBox_Nom.Text
    Feuil5.Range("G" & X).Value = TxtBox_Fonction.Text
    Feuil5.Range("H" & X).Value = TxtBox_Rue.Text
    Feuil5.Range("I" & X).Value = TxtBox_Code.Text
    Feuil5.Range("J" & X).Value = TxtBox_Ville.Text
    Feuil5.Range("K" & X).Value = TxtBox_TelDom.Text
    Feuil5.Range("L" & X).Value = TxtBox_TelPro.Text
    Feuil5.Range("M" & X).Value = TxtBox_TelMob.Text
    Feuil5.Range("N" & X).Value = TxtBox_MailPro.Text
    Feuil5.Range("O" & X).Value = TxtBox_MailPerso.Text
End Sub

Ergotamine,

Je viens de retester le fichier et le code du BTN modifier est le mien et ne fonctionne pas. J'ai du louper un épisode ou j'ai mal compris votre réponse.

Cordialement

Mtek,

Je viens de tester le code que tu m'as proposé. Bizarrement celui-ci fonctionne, alors que je l'avais déjà écrit quelques temps plus tôt. Je pense que je ai du faire une erreur avec la fonction Application.MATCH, que je ne connais pas.

Je continu à améliorer ce code et mon fichier.

Vous remercie chaleureusement de votre aide .

Merci à : Mtek; Galopin 01; Ergotamine.

Bon wek end a tous.

Bonjour,

La fonction Application.WorksheetFunction.Match est la fonction EQUIV sous Excel. Dans le code que je vous avais fourni il permet de renvoyer le numéro de RH sans passer par le List.Index.

Qu'appelez-vous BTN ? Avez-vous étudié les modifications de code fournies ? Quelle est la manipulation réalisée qui ne fonctionne pas et quel est le résultat attendu ?

Cdlt,

Ergotamine,

BTN = Bouton de commande.

Si je comprend bien la fonction

Application.Match(N, Range("C:C"), 0) 
me permet de me positionner sur la ligne dont le numéro est renvoyé par "N". Range ("C:C") est la plage suivante de recherche.

Ensuite les champs sont enregistre avec leur contenu afficher à l'écran.

Voila ce que je comprend. A partir de la, je recherche le contact a modifier. Le résultat de la recherche s'affiche dans la listebox. Un clique sur le contact désiré, affiche l'ensemble des données lui correspondant. On modifie la donnée voulue dans un textbox, puis le BTN "Modifier" effectue la modif des données dans le tableau de la "List RH".

Maintenant que ce petit probleme est résolue je m'attache a rendre le code plus simple et plus optimisé.

Cordialement.

Bonjour,

Sur le fichier que je vous avait joint je n'avais pas de bouton modifier, peut être ne parlons nous pas de la même chose.

Dans mon fichier, une fois la recherche et les données chargées puis modifiées comme vous l'avez indiqué (par exemple ajout d'une rue), un clic sur enregistrer et la modification est bien réalisée dans la base de donnée.

Confirmez-vous le ?

Cdlt,

Ergotamine Bonjour,

Effectivement le code fonctionne.

Nota: La fonction NBVal me sert a calculer le nombre d'enregistrement trouvés, utile quand le nombre de contact dépasse la capacité de la listeBox.

J'ai déplacé cette fonction sur la toute première ligne du tableau (ne risque pas d'être supprimée).

Merci pour toutes vos info et votre aide.

Cordialement.

Bonjour,

Merci pour le retour, je ne comprenais pas pourquoi il fonctionnerai chez moi mais pas chez vous. Me voilà rassuré.

En effet je pense que c'est une sage décision.

Cdlt,

Rechercher des sujets similaires à "modifier supprimer donnees tableau via formulaire"