Commande pour modifier ou supprimer information dans usf

zombe

XLDnaute Occasionnel
Salut le forum

J'ai un usf comportant 2 commandbuttons.
l'usf comporte des textbox.
J'ai déjà un code qui me permet de transferer les informations des textbox vers la plage définie (B6:G).
Maintenant je souhaite pouvoir modifier ou supprimer les informations de ma plage.
Pour cela je souhaite que lorsqu'on renseigne le textbox1, que les informations s'affichent automatiquement dans les autres textbox.
Exemple si je saisie za1858 dans le textbox1,
le textbox2 aura pour valeur c6 (valeur de la cellule)
le textbox3 aura pour valeur d6 (valeur de la cellule)
le textbox4 aura pour valeur e6 (valeur de la cellule)
le textbox5 aura pour valeur f6 (valeur de la cellule)
le textbox6 aura pour valeur g6 (valeur de la cellule)
De même si je saisie DE2545 dans le textbox1,
Exemple si je saisie za1858 dans le textbox1,
le textbox2 aura pour valeur c7 (valeur de la cellule)
le textbox3 aura pour valeur d7 (valeur de la cellule)
le textbox4 aura pour valeur e7 (valeur de la cellule)
le textbox5 aura pour valeur f7 (valeur de la cellule)
le textbox6 aura pour valeur g7 (valeur de la cellule)
Merci de m'aider avec le fichier joint.
Pour la suppression, je souhaite que lorsque je renseigne le textbox1, que les informations correspondantes (comme décrit ci-dessus), s'affichent dans les textbox. si je click sur le bouton, les informations devront être effacer dans la plage.
 

Pièces jointes

  • Modif_donne_usf.xlsm
    31.9 KB · Affichages: 45

Modeste

XLDnaute Barbatruc
Re : Commande pour modifier ou supprimer information dans usf

Bonjour zombe,

Est-ce un fait exprès, qu'il n'y ait pas le moindre petit bout du code que tu as déjà écrit, dans le fichier (à part le 'Gestion_Users.Show')? ... Un secret d'État ;) ... ou un malencontreux oubli? Pas un excès de timidité, tout de même!? :D

Trouver la ligne de l'enregistrement à modifier ou supprimer, sur base du contenu du TextBox1 me semble une bonne introduction ... mais je ne sais pas à quel événement tu souhaites l'associer ... une première piste, donc, serait:
VB:
Private Sub TextBox1_AfterUpdate()
laligne = Application.Match(Me.TextBox1.Value, Sheets("PARAMETRE").[B1:B100], 0)
End Sub
J'ai supposé que les 'user_codes' ne contiendront pas de doublons!

Ceci étant, il va te falloir gérer les erreurs d'encodage, avec un TextBox ... pourquoi pas un ComboBox, chargé à l'affichage de ton UserForm, de tous les 'user_codes' repris en colonne B?
 

zombe

XLDnaute Occasionnel
Re : Commande pour modifier ou supprimer information dans usf

Salut Modeste

Merci pour votre intervention.
Au risque d'embrouller les forumeur, je n'ai pas voulu joindre un code car je ne maitrise vraiment pas les fonctions match, vlookup... et je souhaite vraiment comprendre leur fonctionnement.
J'ai voulu m'inspirer de cas un peu similaire mais je trébuche.
J'ai préféré un textbox en lieu et place d'un combobox pour éviter que les autres utilisateurs ne voient les codes users des autres(telle est mon idée). Oui les users ne contiendront pas de doublons car je vais ajouter ce code dans le code final:
Code:
If Application.WorksheetFunction.CountIf(PL, TextBox1.Value) > 0 Then
    MsgBox ("Ce user est déjà enregistré")
    Exit Sub
End If
Votre piste est bien mais pour que je puisse continuer seul, je vais demander autre chose:
Voici ce que j'ai essayé:
Code:
Private Sub TextBox1_AfterUpdate()
laligne = Application.Match(Me.TextBox1.Value, Sheets("PARAMETRE").[B1:B100], 0)
Cells(6, laligne + 1) = TextBox2
Cells(7, laligne + 1) = TextBox3
Cells(8, laligne + 1) = TextBox4
Cells(9, laligne + 1) = TextBox5
Cells(10, laligne + 1) = TextBox6
End Sub
J'ai du mal à comprendre ceci:
Code:
Cells(6, laligne + 1)
Comment les interpréter (quant on veut faire allusion à la ligne ou à la colonne.
Merci
 

Modeste

XLDnaute Barbatruc
Re : Commande pour modifier ou supprimer information dans usf

Re-bonjour,

Pas sûr d'avoir compris ta question ...
Cells (utilisé seul) représente l'ensemble des cellules d'une feuille
Cells(ligne, colonne) avec les deux arguments -et toujours dans l'ordre n° de ligne, puis n° de colonne- représente la cellule à l'intersection de la ligne x et de la colonne y.
Attention: ne pas oublier que comme tel, Cells fera référence aux cellules de la feuille active au moment de l'exécution de cette partie du code

Dans ton fichier, le code suivant permettrait de "garnir" les TextBox avec les données figurant dans la feuille, dès que TextBox1 est mis à jour (avec un code existant)
VB:
Private Sub TextBox1_AfterUpdate()
    laligne = Application.Match(Me.TextBox1.Value, Sheets("PARAMETRE").[B1:B100], 0)
    TextBox2 = Cells(laligne, 3)
    TextBox3 = Cells(laligne, 4)
    TextBox4 = Cells(laligne, 5)
    TextBox5 = Cells(laligne, 6)
    TextBox6 = Cells(laligne, 7)
End Sub
 

zombe

XLDnaute Occasionnel
Re : Commande pour modifier ou supprimer information dans usf

Salut Modeste et le forum

Merci pour les explications.
Je viens de tester le code mais rien ne se produit après que j'ai renseigné le textbox1.
Pouvez-vous essayer avec le fichier joint au POST#1?
 

Modeste

XLDnaute Barbatruc
Re : Commande pour modifier ou supprimer information dans usf

Re,

Réfléchissons un instant: as-tu tenu compte du "Attention" de mon précédent message? Si tu utilises le bouton en Feuil1 pour afficher ton UserForm, quelle est la feuille active (je souligne encore cette fois), au moment où le UserForm s'affiche? La Feuil1, sans doute? Et donc rien ne semble se passer, parce que chaque textBox se voit affecter la valeur des cellules de la Feuil1 (qui sont vides!)

Regarde la première instruction dans le code proposé: pour chercher la ligne où apparaît le user_code entré en TextBox1, j'ai fait précéder l'adresse de la plage de Sheets("PARAMETRE").

Essaye donc en écrivant, à chaque fois quelque chose comme: TextBox[SUB]x[/SUB] = Sheets("PARAMETRE").Cells(ligne, y)... les deux éléments en rouge varieront

... et dis-nous si c'est mieux?
 

zombe

XLDnaute Occasionnel
Re : Commande pour modifier ou supprimer information dans usf

Je viens de tester en tenant compte de vos observations mais sans gain de cause.
Ci-dessous le code corrigé:
Code:
Private Sub TextBox1_AfterUpdate()
    laligne = Application.Match(Me.TextBox1.Value, Sheets("PARAMETRE").[B6:B100], 0)
    TextBox2 = Sheets("PARAMETRE").Cells(laligne, 3)
    TextBox3 = Sheets("PARAMETRE").Cells(laligne, 4)
    TextBox4 = Sheets("PARAMETRE").Cells(laligne, 5)
    TextBox5 = Sheets("PARAMETRE").Cells(laligne, 6)
    TextBox6 = Sheets("PARAMETRE").Cells(laligne, 7)
    
End Sub
 

Modeste

XLDnaute Barbatruc
Re : Commande pour modifier ou supprimer information dans usf

Je viens de tester en tenant compte de vos observations mais sans gain de cause.
Allez, courage! :) ... N'y a-t-il pas autre chose que tu as changé, au passage, jeune sacripant!? ;)

Application.Match, c'est la fonction EQUIV, utilisée en VBA. Si tu écris, dans une cellule de ta feuille PARAMETRE,
Code:
=EQUIV("za1858";B6:B100;0)
quel sera le résultat? Excel te dira que, dans cette plage, za1858 figure en position 1

Ce que tu lui demandes de faire, dans ta macro (puisque ligne = 1), c'est d'inscrire, dans les TextBox, les valeurs des colonnes 3, 4, 5, etc. MAIS en les prenant en ligne 1 de la feuille de calcul! Ces cellules sont vides, à nouveau!!
Remets, dans la première instruction, la plage [B1:B100], comme je l'avais proposé (ou, éventuellement, ajoute 5 à la valeur de 'laligne', si tu gardes [B6:B100])

Dans ce genre de cas, utilises le mode Pas-à-pas et regarde la valeur de ligne, quand tu exécutes ton code
 

zombe

XLDnaute Occasionnel
Re : Commande pour modifier ou supprimer information dans usf

Le jeune sacripant revient cette fois ci avec de bonnes nouvelles.
J'ai tester la formule Equiv et ca fonctionne. Il en est de même pour le code.
Merci vraiment pour les éclaircissements.
Il reste un dernière chose: comment faire pour que si modification il y'a, que ces modifications soient prises en compte lorsque je cliquerai sur le bouton "Modifier".
Idem si je clic sur le bouton "supprimer" (que les informations à s'effacent de la plage).
 

Modeste

XLDnaute Barbatruc
Re : Commande pour modifier ou supprimer information dans usf

Le jeune sacripant revient cette fois ci avec de bonnes nouvelles.
Fort bien, petit chenapan ;)

Non, mais, blague à part, une fois que Match t'a fourni le n° de ligne, le reste devrait aller presque tout seul:
pour la suppression, je verrais bien quelque chose comme
VB:
Private Sub bt_suppr_Click()
    Sheets("PARAMETRE").Rows(laligne).Delete
    Unload Me
End Sub

Attention: (oui, encore!) le variable laligne, si elle est utilisée dans différentes procédures doit être déclarée 'Public'
Donc, tout au-dessus de la première ligne de code dans ton UserForm, ajoute
VB:
Public laligne As Integer
Utilise un Long, si tu as vraiment beaucoup de lignes!

Pour la modification, je vais te laisser chercher un peu ... mais un indice: il suffit de faire tourner la tête au code utilisé pour afficher les infos!
 

zombe

XLDnaute Occasionnel
Re : Commande pour modifier ou supprimer information dans usf

Salut Modeste

Merci pour toute l'assistance.
Suis très satisfait.
Je voulais savoir quelque chose:
quand doit-on utiliser une déclaration de type long, integer, variant...?
Je l'ai utilise mais sans savoir pourquoi pourvu que ca marche.
 

Modeste

XLDnaute Barbatruc
Re : Commande pour modifier ou supprimer information dans usf

Bonsoir zombe,

Très satisfait, ça veut dire que tu as trouvé comment modifier un enregistrement existant? Félicitations!

Pour ta question concernant les types de données, place ton curseur dans ton code sur Integer ... et appuie sur F1 (je ne saurais pas t'expliquer mieux et de manière plus détaillée ce que tu y trouveras :()
Tu devrais pouvoir aisément trouver les infos sur les types Long, puis faire le lien avec le nombre de lignes dont je parlais!
 

Discussions similaires

Réponses
5
Affichages
193