Modification des données existantes via un userform

Bonsoir à tous

J'ai un "userform" qui me permet de faire une recherche et modification d'un client.

la recherche fonctionne très bien (merci @M12)

Par contre la modification ne fonctionne que sur le Nom et pas sur les autres données, sauf, une foi j'ai réussi à changer le prénom et le mail!

Cette déclaration ce trouve au tout début de l' userform

Dim no_ligne As Integer

et voici le code de mon bouton

Private Sub CommandButton_modifier_Click()
   If Not IsOKTxtBx Then
      MsgBox "Veuillez renseigner les champs obligatoires (*)"
      Exit Sub
    End If
modifier
End Sub

et le code pour l'appel "modifier"

Sub modifier()
   With ActiveSheet
    If Not ComboBox1.Value = "" Then
no_ligne = ComboBox1.ListIndex + 4
       .Cells(no_ligne, 2) = TBNom.Value
       .Cells(no_ligne, 3) = TBPre.Value
       .Cells(no_ligne, 5) = TBSoc.Value
       .Cells(no_ligne, 6) = TBAd1.Value
       .Cells(no_ligne, 7) = TBCp.Value
       .Cells(no_ligne, 8) = TBVille1.Value
       .Cells(no_ligne, 9) = TBPays1.Value
       .Cells(no_ligne, 11) = TBAd2.Value
       .Cells(no_ligne, 12) = TBCp2.Value
       .Cells(no_ligne, 13) = TBVille2.Value
       .Cells(no_ligne, 14) = TBPays2.Value
       .Cells(no_ligne, 16) = TBTel.Value
       .Cells(no_ligne, 17) = TBNais.Value
       .Cells(no_ligne, 18) = TBMail.Value
       .Cells(no_ligne, 19) = TBInf.Value
MsgBox ("Modification effectuer")
'Else: MsgBox ("Veuillez sélectionné le n° de client ou le nom de la personne à modifier")
'Exit Sub
End If
End With
Unload uf_client
uf_client.Show 0
End Sub

Merci à tous pour votre patience et votre aide

44boutiquev5.xlsm (183.30 Ko)

Bonjour diablo7431,

j'ai fait le test et tout fonctionne bien,

peut être que un caprice de l'ordi.

essayer en fermant le fichier et l'application excel

et refaite le test à nouveau.

bonne chance!

Bonjour sabV,

Tu en as de la chance car j'ai déjà relancé le fichier redémarré le pc et même téléchargé le fichier que j'avais mis en ligne, mais rien !!

Mise a part le "nom", je ne sais faire de modif sur aucune autres données.

Salut tous le mondes

Je sèche complètement!!

Je cherche depuis ce matin, j'ai fais une multitudes tests et de modifs et toujours pas de résultats la seul donné qui ce modifie c'est le "nom"!

j'ai, aussi, essayé comme ceci:

Sub modifier()
   With ActiveSheet
    'If Not ComboBox1.Value = "" Then
no_ligne = ComboBox1.ListIndex + 4
       Cells(no_ligne, 2) = TBNom.Value
       Cells(no_ligne, 3) = TBPre.Value
       Cells(no_ligne, 5) = TBSoc.Value
       Cells(no_ligne, 6) = TBAd1.Value
       Cells(no_ligne, 7) = TBCp.Value
       Cells(no_ligne, 8) = TBVille1.Value
       Cells(no_ligne, 9) = TBPays1.Value
       Cells(no_ligne, 11) = TBAd2.Value
       Cells(no_ligne, 12) = TBCp2.Value
       Cells(no_ligne, 13) = TBVille2.Value
       Cells(no_ligne, 14) = TBPays2.Value
       Cells(no_ligne, 16) = TBTel.Value
       Cells(no_ligne, 17) = CDate(TBNais.Value)
       Cells(no_ligne, 18) = TBMail.Value
       Cells(no_ligne, 19) = TBInf.Value
MsgBox ("Modification effectuer")
'Else: MsgBox ("Veuillez sélectionné le n° de client ou le nom de la personne à modifier")
'Exit Sub
'End If
End With
Unload uf_client
uf_client.Show 0
End Sub

Quelqu'un d'autre a-t-il testé mon fichier joint? et quel résultat?

Bonjour je viens de faire le test.

Si toutes les cases sont renseignées alors la modification fonctionne ;

dans le cas contraire çà ne fonctionne pas. ;

alors que j'ai bien le message de modification dans les deux cas

Bonjour Xmenpl, merci d'y avoir jeté un oeil

Pour compléter ton test, refait le immédiatement après la première modif et la plus rien sauf le nom qui change! et même en remplissant tous les champs!

Effectivement comprend pas !!!

j'ai fait un arrêt juste après la validation de TBsoc et je constate qu'il remet la valeur précédente et pas la valeur saisie

pour modif

pour toi mon code a l'air bon?

Bonjour,

J'ai trouvé d'où venait le soucis...

Tu as row source = b4:b200 ou plus

Du coup dès que tu changes le nom dans cette colonne, ça appelle ta macro private sub combobox2_change, qui elle même appelle la macro recherche qui va réinitialiser tes autres contrôles avec les valeurs qui sont dans la feuille, puis après l'export des modifications continue...

Le soucis c'est ton rowsource combiné à combobox2_change. Soit tu changes le change par autre chose, soit tu changes ta façon d'initialiser ta combobox2. Sinon ça ne marchera jamais

Bonne journée

EDIT: J'ai modifié la façon de remplir ta liste, ça donne ceci :

Bien vu Ausecour.

Je voyais bien qu'au moment de la modification il remettait les anciennes valeurs mais j'avais pas encore

trouvé ce qui relançait sa fonction "cherche"

Bingo

Effectivement, je me penchais justement là dessus en parcourant le forum.

Car dans mes tests, en modifiant ".value" par "texte", je remarquais qu'avant la msgbox "Modification effectuer" il modifiait le nom, dès que je faisais "Ok" il remplaçais le reste (mais ça ne fonctionnais que sur les deux premières lignes).

là je me suis dis qu'il devait rapplé une macro qui réinitialisais, mais je ne savais pas la quel, merci d'avoir mis le doigt dessus.

ouffff.

Sorry pas vu les dernières réponses...

De rien

Au départ je ne comprenais pas non plus ce qui changeait la combobox2... surtout comme on mettait la valeur du nom... en passant cette ligne en commentaire j'ai vu que ça exportait bien le reste... et après j'ai cherché sur la combobox2 ce qui liait ça à la colonne B, et j'ai trouvé ton row source

Je suis pour le change sur la combobox2, moins pour le reste

Que veut tu dire par :

Je suis pour le change sur la combobox2, moins pour le reste

Je commence à me débrouiller, mais encore loin d'être à vos niveaux de programmations.

La plus part des codes, je les pèches à droite ou à gauche et j'arrive +- à les lires et les comprendres pour savoir les modifiés à mon utilisation.

Mais, de là, à coder tout de A à Z, j'ai encore du boulot! Mais cela viendra bien.

Heureusement qu'il y a des passionnés à votre hauteur, pour nous aidé.

Bonjour,

Je découvre avec ce fichier joint l'ampleur du projet prévu...

A mon avis tu est très loin d'en faire quelque chose d'opérationnel.

Des bribes de code péché ici ou là, n'ont jamais fait un programme : Tout juste une usine à gaz à la Franquin !

Si c'est juste pour t'entrainer à coder un peu en VBA pas de problème mais si tu comptes vraiment utiliser ça pour la gestion d'un petit bizness à mon avis tu perds ton temps... !

Pour essayer de positiver un peu, déjà si on regarde un peu ta base de clients :

Une base se construit avec une ligne d'en-tête et des lignes d'enregistrements (Les clients) et pas de lignes inutiles !

L'adresse de livraison devrait figurer dans la base de commande (qui n'existe pas encore)

En VBA diviser pour mieux régner n'est pas valable : Un seul UserForm unique pour gérer une base de données est préférable. Multiplier les Userforms c'est multiplier les ennuis...

Un UserForm doit être capable de réaliser les 4 opération (Ajout/Recherche/Modification/Suppression) Tant que tu n'es pas capable de réaliser cela inutile d'essayer de lier cela avec des commandes, facturation ou autre...

Enfin il ne faut pas utiliser RowSource dans les propriétés d'un Combo ou d'un ListBox mais la méthode AddItem.

Bon enfin je dis ça parce que c'est mon avis. Hein ! Après tu en fait ce que tu en veux.

Bonne continuation.

Que veut tu dire par :

Je suis pour le change sur la combobox2, moins pour le reste

Je commence à me débrouiller, mais encore loin d'être à vos niveaux de programmations.

La plus part des codes, je les pèches à droite ou à gauche et j'arrive +- à les lires et les comprendres pour savoir les modifiés à mon utilisation.

Mais, de là, à coder tout de A à Z, j'ai encore du boulot! Mais cela viendra bien.

Heureusement qu'il y a des passionnés à votre hauteur, pour nous aidé.

Bonjour,

En fait si on revient à ce que j'avais dis, tu avais deux choses qui rentraient en conflit, tu avais ton row source qui lançait ton combobox2_change

Du coup soit on remplaçait ton combobox2_change par un combobox2_exit par exemple, soit on changeait la façon dont tu créais ta liste.

Et là-dessus je disais donc que j'aimais bien utiliser combobox2_change, et que je préfèrais ne pas utiliser Row.source car je préfèrais utiliser Combobox2.list pour initialiser la liste.

Bonjour,

La question se pose même pas : RowSource c'est pour les listes qui ont vocation à rester figées...

Ça va bien pour l'instant tu n'as que 3 lignes... Comment tu feras par la suite quand tu en auras 300 ou 3000 pour trier (Dédoublonner éventuellemeent) si tu n'as pas posé les bases de ton UserForm dans un Initialize ?

Bref il semble que notre ami s'oriente vers un projet professionnel complexe : Inutile de partir avec des bases scabreuses !

A+

Bonjour Galopin et Ausecour,

Merci pour vos réponses constructives , j'en prends bonne note

Je me doute qu'à vos yeux ça ressemble à une usine à gaz, mais au fur et à mesure que je j'apprends, j'applique les conseils et purifie ce projet.

Le fichier joint n'est que pour les forums, j'ai retiré un max de choses pour l’alléger le plus possible. peut être de trop!

Car, Galopin, pour répondre à ton interrogation:

L'adresse de livraison devrait figurer dans la base de commande (qui n'existe pas encore)

Dans le fichier original, j'ai ce qu'il faut sur ma feuil "commandes" pour l'adresse de livraison.

Serte il y à bien des lignes inutiles mais ce n'est que le fichier test.

Pour le double usf j'ai hésité à tout rassembler ou pas, et j’entends bien que j'aurais du rester sur ma première idée, merci pour cette confirmation

Pour ce qui est de l'utilisation RowWsource:

@Galopin

Enfin il ne faut pas utiliser RowSource dans les propriétés d'un Combo ou d'un ListBox mais la méthode AddItem.

AddItem associé à une liste qui serait (en exemple)

Private Sub UserForm_Initialize() ComboBox1.List = worksheets("Feuil1").Range("A2:A20").Value End Sub

c'est bien ça?

@Ausecour

j'aimais bien utiliser combobox2_change, et que je préfèrais ne pas utiliser Row.source car je préfèrais utiliser Combobox2.list pour initialiser la liste.

J'ai bien compris le message et je ferais attention à ça pour la suite.

Bonjour,

Toutes les méthodes sont bonnes quand on cerne bien les avantages et les inconvénients mais c'est certain que RowSource est particulièrement foireux pour des sources variables.

Si tu as des listes bloquées tu peux bien utiliser ce que tu veux. Si le choix se limite à Oui ou Non ou le choix d'un jour de la semaine ou un mois... Tu ne risques pas d'avoir de surprise, le 13ème mois est pas près de se poiter dans les listes de choix...

En revanche pour toute les listes ou tu risques d'avoir un refresh si tu ajoutes ou retranches un enregistrement, c'est plus complexe car il faudra maitriser ce refresh et le initialize sera pas suffisant.. Il faudra probablement créer une miniSub LoadCombo appelable à la demande dans le Initialize et en cas d'ajout et de suppression...

A+

Bonjour Galopin,

Merci pour toutes c'est infos

Je te souhaite un bon dimanche

Rechercher des sujets similaires à "modification donnees existantes via userform"