Création d'un bouton modifier à un tableau excel, problème

Bonjour

En PJ je vous ai mis le fichier sur lequel je travail actuellement, je vous explique mon problème; Voila j'ai un tableau sur lequel j'ai mis un bouton "ajouter un contact" qui fonctionne très bien, je cherche à rajouter un bouton "Modifier un contact" pour modifier un contact entré dans le tableau lorsqu'il sera bien plein, je pense qu'il faut faire un nouvel userform et lui mettre un bouton de recherche etc... J'ai beau essayer rien ne fonctionne et je galère vraiment.

Auriez vous la possibilité de m'aider à solutionner mon pb?

Merci d'avance, cordialement, babou69

Bonjour,

La bonne solution est toujours d'utiliser un même formulaire pour les ajouts et les modifications : cela économise un userform et autant de code pratiquement identique...

Il faut aménager le Userform pour qu'il remplisse les deux fonctions, soit donc doté d'une fonction de recherche sur liste des noms-prénoms affectés à une combobox. Le bouton de lancement peut être le même, la bascule entre les deux fonctions peut se faire avec une CheckBox pour masquer ou démasquer la Combo.

La distinction lors de la validation se fera sur la ligne à modifier mémorisée ou non (variable à prévoir). Si pas de ligne de modif. on est en ajout et on insère un nouvel enregistrement en fin...

Mais pour un projet cohérent, il te faut revoir préalablement ta façon de coder tes éléments actuels : abandonner le recours à ActiveCell (aléatoire) ou à [c100] !!! au profit d'un adressage sûr, mettre en place un nom dynamique pour atteindre directement ta base de données, apprendre à faire des boucles pour éliminer les énumérations fastidieuses, particulièrement décourageantes si on veut t'apporter une aide, privilégier les fonctions VBA dans le code lorsqu'elles existent (plutôt qu'aller chercher des fonctions Excel dans ce cas). C'est pas limitatif...

Cordialement.

Je comprend mais je ne sais pas trop comment changer mes codes, dès que j'essaye autre chose ça bloque; pouvez vous me montrer ce que vous pensez mieux pour mes codes?


-"Il faut aménager le Userform pour qu'il remplisse les deux fonctions, soit donc doté d'une fonction de recherche sur liste des noms-prénoms affectés à une combobox. Le bouton de lancement peut être le même, la bascule entre les deux fonctions peut se faire avec une CheckBox pour masquer ou démasquer la Combo.

La distinction lors de la validation se fera sur la ligne à modifier mémorisée ou non (variable à prévoir). Si pas de ligne de modif. on est en ajout et on insère un nouvel enregistrement en fin..."

La je t'avoue que tu m'a un peu perdu...

Par quoi vous remplaceriez Activecell?

[c100] vous voulez dire que je doit en mettre bien plus ou vous souhaitez mettre une autre façon de l'écrire?

Boujour le fil, bonjour le forum,

Arf, je n'ai pas utilisé la bonne solution. J'ai deux Userforms. Mais comme disait Brassens : "Le bon Maître me le pardonne"...

J'ai fait comme je fais pour moi, j'attribue une valeur à la propriété [Tag] des contrôles à remplir. Cette valeur correspond à la colonne dans laquelle la valeur du contrôle doit être renvoyée. [Tag] = 3 pour nom / [Tag] = 4 pour Prenom... / [Tag] = 8 pour CPostal. Cela permet de boucler pour, récupérer les données d'un ligne (dans le cadre de la modification), renvoyer les données vers le tableau (dans le cadre de l'ajout). C'est la variable publique LI qui fait tout... Code commenté.

Pour la recherche, au fur et à mesure que tu tapes du texte dans la TextBox,1 la ListBox1 s'actualise affichant les lignes contenant le texte édité. Si elle se vide c'est que aucune données ne contien tle texte édité. J'espère que ça te conviendra...

33babou-v01.xlsm (29.21 Ko)

Bonjour ThauTheme; je regarde ce que tu m'a envoyé je reviens vers toi juste après, juste à titre informatif je vous envoi ce que j'avais fais en attendant

Wow c'est du haut level!!!!!

Je n'aurai jamais pu faire ça tout seul

On est obligés d'avoir tout ça hein?


Le dernier fichier que je vous ai envoyé, c'est pas plus facile si on reprends celui la et qu'on codent la zone de liste modifiable pour sélectionner les contact du tableau?

Enfaite ma question la c'est, est il possible qu'avec le fichier en PJ, lorsqu'on cliquent sur la liste déroulante en bas, les contact déja inscrits s'affichent. Et qu'on puissent les modifier...

Re,

L'avantage avec ce que je te propose c'est que cela te permet de chercher autre chose que le nom seul. Tu tapes un code postal et tous les contacts qui ont ce code postal s'affichent. Idem pour l'âge ou la classe.

Mais si tu veux uniquement le nom il te suffit d'alimenter la ComboBox :

Private Sub UserForm_Initialize()
Dim O As Worksheet
Dim DL As Integer

Set O = Worksheets("Feuil1")
DL = O.Cells(Application.Rows.Count, "C").End(xlUp).Row
cboRefDossiers.List = O.Range("C2:C" & DL).Value
End Sub

Mais ensuite il te faut ouvrir l'UserForm1 sur la ligne du nom sélectionné !... J'ai pas envie de de tout recoder, je te laisse le soin de le faire avec l'exemple que je t'ai fourni...

Merci à toi

Tu veux pas me reaider un petit coup? J'arrive pas à programmer le bouton modifier= "command button 2", ou explique moi rapidement ce que je doit mettre dans mon programme

Re,

Désolé mais je n'ai pas envie de coder à ta manière. Le code que je t'ai proposé fonctionne, non ?...

Je viens de me rendre compte que je n'avais pas commenté le code de l'userFom2, mais uniquement celui de l'UserForm1. La seule chose que je peux faire, si tu en vois l'utilité, c'est de commenter cette partie...

Si je t'envoi ce que je viens de faire tu peux regarder?


Bonsoir le fil, bonsoir le forum,

Tu aurais un problème sur une ligne de code, même avec une méthode qui ne me convient pas, j'aurais pu t'aider à résoudre ce problème. Mais ce que tu as demandé c'est carrément la méthode complète pour résoudre ton problème. Ce n'est pas la même chose...

Ce que j'essaie de te faire comprendre, c'est que chacun d'entre nous a sa propre manière d'écrire le code, ses habitudes, ses méthodes. Ce que je t'ai proposé c'est ma manière de voir les choses. Ce n'est certes pas la meilleure mais c'est comme cela que je fais. Si ça te plaît, très bien, si ça te plaît pas très bien aussi... Mais ne me demande pas de reprendre ton code avec des méthodes qui ne me conviennent pas. Je n'en ai absolument aucune envie...

Pourquoi n'essaies-tu pas toi, de comprendre ce que je te propose ? D'autant plus que je suis vraiment persuadé que c'est bien mieux que de faire une recherche sur le nom uniquement...

Bonsoir tous,

J'ai dormi un peu, et je vois que le débat a évolué. Je n'ai pas le temps de voir dans quelle direction... et je livre ma copie établie sur la base de projet initial tel qu'il se présentait en début de sujet.

Les aspects essentiels sur lesquels repose le fonctionnement (qui illustre mes propos antérieurs) :

  • une plage nommée dynamique (BNom) qui correspond à la première colonne de ta base, partant avec rien elle inclut l'en-tête, ce qui n'est pas gênant en soi (cela facilite même les suppressions)
  • un seul bouton pour lancer un seul Userform, utilisé pour ajouter, modifier ou supprimer
  • l'ouverture se fait en mode Ajout, on passe en mode Recherche en cochant une CheckBox en tête du formulaire
  • si on coche, cela fait apparaître une ComboBox listant les Noms et Prénoms de la base, ainsi qu'un bouton Supprimer
  • une sélection dans la Combo affiche l'enregistrement dans les TextBox : on peut alors modifier
  • si on décoche la CheckBox, on repasse en mode Ajout
  • on valide une modif ou un ajout par le bouton OK : la procédure détermine si c'est un ajout ou une modif. (dans ce dernier cas, elle dispose du numéro de ligne dans une variable niveau module, si la variable est à 0 elle lui affecte la ligne suivante de la base
  • la mise à jour des données (ajout ou modif) se fait par affectation d'un tableau sur la ligne modifiée ou ajoutée, pour un ajout il est procédé à une insertion de ligne, ce qui permet d'avoir une ligne au format des lignes précédentes
  • si suppression (bouton Supprimer), confirmation est demandée et la ligne est supprimée.
  • NB-La plage nommée permet d'utiliser exclusivement le nom de plage pour tout adressage dans la base (on n'utilise plus le nom de feuille...)

Ceci résume le dispositif fonctionnel. Les autres éléments tu les verras et tu pourras éventuellement les compléter ou modifier...

En vrac : mise en majuscule du NOM, initiales majuscules du Prénom, vérification du contenu numérique de l'âge et du code postal (sans blocage à 5 chiffres pour ce dernier), obligation du nom et prénom saisis pour valider (pas mis d'obligation sur d'autres données car je ne sais pas)... sans oublier une façon de faire des boucles avec des noms littéraux !

Dans la foulée, j'ai mis en place un tri de la base (un bouton) qui utilise un petit Userform muni d'OptionButton pour choisir le tri à effectuer. Par défaut on trie par Nom et Prénom, les autres choix possibles sont par âge, classe ou code postal (pour une même valeur de ces 3 critères, classement par nom et prénom...)

Cordialement.

Bonjour le fil, bonjour le forum,

je pense que ta proposition, Maître, devrait convenir parfaitement à Babou. Impeccablement codée. Néanmoins, je trouve ma version plus pratique. Elle permet de faire une recherche sur toutes les colonnes et pas uniquement sur le nom. Ça sert en même temps de filtre, sur un âge, un code postal ou une classe. Mais ce n'est pas ce qui était demandé par Babou...

Salut ThauThème !

Pas de "Maître" entre nous ! Ma démo visait un mécanisme de base amalgamant ajout-modif dans un ensemble de proc. unique qui permet de ne pas se préoccuper pratiquement de savoir si on ajoute ou modifie, c'est la proc. qui le détermine...

Ce dispositif qui peut lui-même connaître quelques variations s'accomode par ailleurs de toutes sortes d'ingrédients connexes...

Pas d'incompatibilité à mon sens. Et au niveau des sous-mécanismes, le choix relève surtout à mon avis de l'économie globale qu'il procure à l'ensemble, sachant qu'il y a toujours des choix équivalents et qu'une part subjective intervient dans le résultat final...

Je peux te préciser que, si dans la période je n'utilise que peu les Tag (c'est un constat !), il n'en a pas toujours été ainsi (!) et c'est un moyen que je considère comme des plus intéressants (on joue en coulisse si je puis dire...)

Ceci étant, je ne crois pas que l'on poursuivra la discussion sur le sujet de Babou, qui semble avoir pris une autre voie...

Bonne journée à toi.

Re,

En parlant de voie... Là c'était du Pathé-Marconi. "La Voix de son Maître"... Ha non m***e ! Tu veux plus... Arf !

Bonne journée à toi aussi.

Rechercher des sujets similaires à "creation bouton modifier tableau probleme"