Modification de valeurs en utilisant un UserForm

Bonjour à toutes et tous,

J'aimerais créer un bouton qui me permette de changer les valeurs de plusieurs cellules situées sur la même ligne en faisant appel au même UserForm que celui utilisé pour renseigner ces valeurs.

Explication : Dans le fichier ci-joint, avec le bouton "Configuration", je renseigne différentes valeurs dans les cellules. Une fois validé, je n'ai plus moyen de les modifier. J'aimerais donc avoir un bouton de commande qui aurait la même action que le bouton "Configuration" à la différence prêt qu'il m'afficherait les valeurs renseignées dans la ligne active ( la ligne correspondant à la cellule sélectionné : si je sélectionne C8 alors il m'affiche toutes les valeurs de la ligne 8) et lorsque je valide la nouvelle sélection, il n'écrit pas à la suite, mais sur la ligne active.

Espérant avoir été suffisamment clair pour être compris ;) merci d'avance

Le code pour déverrouiller Visual Basic est : admin

Le code pour déverrouiller les feuilles est : MGF

Bonjour

Quel est le mot de passe pour aller en VBA

A+ François

Bonjour, merci de vous pencher sur ma question.

Le mot de passe est : admin

Du coup le fichier évolue, j'ai créé un UserForm en plus (UserForm9) qui reprend les valeurs de la feuille.

Ma demande : Je ne sais pas comment faire pour que lorsque je sélectionne dans la Combobox une valeur, les texteBox affiches les valeurs correspondantes de la même ligne.

Et que par la suite, En cliquant sur le bouton "modifier", les nouvelles valeurs viennent remplacer l'ancienne sélection.

Bonjour,

En attendant le retour de Fanfan, je regarde votre fichier, les feuilles sont protégées par un mot de passe.... et le mot de passe n'est pas "admin"

Je n'arrive toujours à comprendre pourquoi on met des mots de passe dans les fichiers lorsque l'on demande de l'aide sur un forum

Petit conseil si je peux me permettre : évitez trop d'userforms car à force d'en mettre trop vous risquez d'arriver à une "usine à gaz".

Cordialement

Bonjour Dan, Merci de vous pencher sur ma question !

Si vous regardez mon premier post vous verrez les deux mots de passe utilisés ... Les feuilles sont protégé par "MGF", Visual basic par "admin".

Mais dans tous les cas, j'ai enlevé le mot de passe de visual basic dans mon dernier fichier mis en ligne dans cette conversation, afin d'éviter toute confusion.

Pour le nombre d'UserForm je suis plutôt d'accord avec vous, mais je répond moi-même à une demande venant de mon chef et dois donc m'adapter le plus possible à celle-ci.

Cordialement ;)

Ok désolé pour les mots de passe qui étaient renseignés....

mais je répond moi-même à une demande venant de mon chef

Oui mais prévenez le tout de même. Il ne faudrait pas qu'il vienne dire après que cela ne fonctionne pas trop... Plus vous allez avoir d'userform, plus vous allez compliquer le "bazard"... surtout si vous devez mettre les infos de plusieurs userform dans une seule feuille

Dans votre userform, mettez ces deux codes juste au dessus de la sub Private Sub UserForm_Initialize()
Attention que DIM Lig as integer doit être positionné tout en haut. Raison pour laquelle vous devez bien placer les deux codes avant Initialize

Dim lig As Integer
Private Sub ComboBox1_Change()
Dim i As Byte, col As Byte

lig = Feuil1.Range("D:D").Find(ComboBox1.Value, LookIn:=xlValues, lookat:=xlWhole).Row
col = 5
For i = 1 To 22
    Me.Controls("Textbox" & i) = Feuil1.Cells(lig, col).Value
    col = col + 1
Next i
End Sub

Private Sub CommandButton1_Click() 'modifier
Dim i As Byte

col = 5
With Feuil1
    .Unprotect "MGF"
    For i = 1 To 22
        .Cells(lig, col) = Me.Controls("Textbox" & i).Value
        col = col + 1
    Next i
    .Protect "MGF"
End With
Unload Me

End Sub

Cordialement

Nan pas de problème voyons ! ;)

Oui mais prévenez le tout de même.

Vous avez sans aucun doutes raison ...

A titre d'information personnelle, à partir de combien d'UserForm peut-on considérer que c'est trop ? Je suis entrain de créer un fichier de gestion des comptes pour moi perso petit à petit et je voudrais faire en sorte qu'il soit au top du top :D

En tout cas merci beaucoup pour la solution, tout fonctionne bien et j'ai compris le code. :)

A titre d'information personnelle, à partir de combien d'UserForm peut-on considérer que c'est trop ?

C'est surtout quand vous avez une interaction entre les userforms que cela peut se compliquer.
Il n'y a pas de règle absolue. Pour un fichier de gestion de comptes, cela peut être assez simple. A voir en fonction de ce que vous voulez au final.

Cordialement

D'accord, c'est noté.

Je ne sais pas vraiment encore, je prends pleins d'idées partout que j'adaptes, j'en imagines d'autres .... C'est pour moi donc je n'ai pas d'impératif dessus et en même temps cela me permet de voir plein de chose sur Excel et le VBA.

En tout cas merci et bonne journée :)

Bonjour

J'avais commencé à tout reprendre mais... est ce que je continue

A+ François

Je ne sais pas vraiment encore, je prends pleins d'idées partout que j'adaptes, j'en imagines d'autres

je comprends oui.
Si vous revenez sur le fil, regardez l'exemple fait par Fanfan qui regroupe 4 userform en une seule et utilise les tableaux structurés. Nettement plus simple comme je vous avais dit avant. Cela restreint le nombre d'Userform

Toutefois, pour Fanfan38 et vu l'utilisation les tableaux structurés, j'aurais plutôt fait ceci pour la private sub initialize

Private Sub UserForm_Initialize()
  With Sheets("Donnees")
    ComboBox1.List = .ListObjects("Operateur").DataBodyRange.Value
    ComboBox2.List = .ListObjects("Portes_type").DataBodyRange.Value
    ComboBox3.List = .ListObjects("Finition").DataBodyRange.Value
    ComboBox4.List = .ListObjects("Sens_ouverture").DataBodyRange.Value
    ComboBox5.List = .ListObjects("Section_huisserie").DataBodyRange.Value
    ComboBox6.List = .ListObjects("Epaisseur_cloison").DataBodyRange.Value
  End With
End Sub

Pour Sotin, si vous décidez d'utiliser les tableaux structurés, les codes que je vous ai proposés seront à modifier voire à changer.

Bonjour

D'accord avec toi DAN ...

J'ai bien dit: dois je continuer....

Aujourd'hui mon fils et mes petits enfants m'ont accaparé et ils sont prioritaire... lol

A+ François

Bonjour à tous,

Merci pour ton fichier fanfan38, je ne connais pas du tout cet outil "tableau structuré" !!!

Je serais ravi d'avoir ton fichier fini, bien qu'avec ce que tu as déjà fait je pense être dans la capacité de continuer.

J'ai toute fois une question par rapport à l'Initialize et le commentaire de Dan, pourquoi privilégier "ListObjects" à "Range" ?

Bonne journée.

Petit souci, lorsque je valide une erreur s'affiche ... Et je ne vois pas trop ce qui ne convient pas.

capture d ecran 21

Bonjour

Les fichiers structurés (listobject) sont bien plus facile à travailler

exemple si tu ajoutes une colonne (avant ou dans le tableau) ton range n'est plus bon (ce n'est pas le cas d'un listobject)

Moi aussi j'ai des questions

C'est quoi cette histoire de niveau?

J'ai cru comprendre que c'est une feuille par client, j'ai donc supprimer le bouton nouvelle feuille

dès que l'on saisie le nom du client => recherche de la feuille correspondante et si elle existe pas => création d'une feuille

Je n'ai pas vu la saisie des 3 premières colonnes dans ton fichier...

Pour le soucis pas étonnant je n'ai pas fini...

A+ François

D'accord, c'est compris pour ListObject.

Le fichier est un récapitulatif de toutes les menuiseries à fabriquer pour 1 client. A savoir qu'il peut y avoir plusieurs chantiers simultanés pour le même client, ainsi chaque feuille représente 1 chantier.

Le bouton "Nouvelle feuille" sert à créer une nouvelle feuille si il y'a plusieurs chantier pour le même client.

Le bouton "Nouveau Niveau" sert à créer dans la même feuille, un en tête qui permet de classer les menuiseries d'après leur étage ( Sous-Sol, Rez de chaussé,...)

Le bouton "Configurateur" sert à remplir toutes les valeurs

Le bouton "Effacer lignes" à effacer une ligne,

Le bouton "Modifier ligne", à modifier les valeurs d'une ligne.

C'est comme ça que j'ai pensé le fichier, mais s'il existe une meilleure méthode plus simple ou plus efficace, je suis preneur !

Du coup, je voudrais avoir le fichier fini afin de pouvoir comprendre cet outil :)

Merci beaucoup ;)

Bonjour,

J'ai toute fois une question par rapport à l'Initialize et le commentaire de Dan, pourquoi privilégier "ListObjects" à "Range" ?

En dehors de ce que Fanfan vous a écrit, vu que chaque tableau structuré ne comporte qu'une seul colonne, vous auriez aussi pu simplement écrire ceci

ComboBox1.List = .Range("Operateur").Value

ou ceci

ComboBox1.List = .ListObjects(1).DataBodyRange.Value
ComboBox2.List = .ListObjects(2).DataBodyRange.Value

1 étant le premier tableau à gauche sur votre feuille Donnees et 2 le deuxième. Là il faut le savoir... surtout si vous déplacez le tableau 1 ailleurs sur la feuille

Pour ma part, je préfère ce que je vous ai proposé qui est plus parlant. Vous savez que Listobjects implique un tableau structure et DatabodyRange comprend les données dans l'objet défini.
Après il vous suffit d'aller voir dans le gestionnaire de noms à quoi cela correspond en matière de ligne et colonne.

D'autres utilisent des manières différentes mais au final, le mieux est toujours ce que vous comprenez bien.

Je vous laisse avec Fanfan38 qui s'occupe de votre projet mais si besoin je reste à dispo

Cordialement

Bonjour Dan,

Merci pour les explications très claires ainsi, que pour votre aide !

Bonne journée :)

une première ébauche.

A+ François

Rechercher des sujets similaires à "modification valeurs utilisant userform"