[VBA]modifications de données
Fermé
jc41
Messages postés
3
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
16 janvier 2007
-
12 janv. 2007 à 14:17
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 22 juil. 2011 à 19:33
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 22 juil. 2011 à 19:33
bonjour à tous
je suis débutant dans l'utilisation des macros et vba
j'ai créé un userform pour insérer mes données dans excel via un formulaire à remplir
mais je bloque sur la marche à suivre pour faire le chemin inverse
je m'explique : une fois rentré mes données je vais devoir les modifier de temps en temps et donc je souhaiterais par exemple avoir une cmdbouton pour retourner à mon formulaire avec les informations de la ligne choisie et pouvoir les modifier et de nouveau les réinsérer
merci de votre aide et je reste à disposition pour éclaircir mon souhait si je suis pas compréhensible pour tous
je suis débutant dans l'utilisation des macros et vba
j'ai créé un userform pour insérer mes données dans excel via un formulaire à remplir
mais je bloque sur la marche à suivre pour faire le chemin inverse
je m'explique : une fois rentré mes données je vais devoir les modifier de temps en temps et donc je souhaiterais par exemple avoir une cmdbouton pour retourner à mon formulaire avec les informations de la ligne choisie et pouvoir les modifier et de nouveau les réinsérer
merci de votre aide et je reste à disposition pour éclaircir mon souhait si je suis pas compréhensible pour tous
A voir également:
- [VBA]modifications de données
- Suivi des modifications word - Guide
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Reinstaller windows sans perte de données - Guide
- Trier des données excel - Guide
4 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
16 janv. 2007 à 00:12
16 janv. 2007 à 00:12
bonjour
je doute un peu que tu puisses faire ta modification avec le userform de création,
de manière simple et efficace.
lorsque tu crées un nouvel enregistrement, tu insères ta ligne en bas de feuille,
du moins je suppose.
lorsque tu modifies, tu dois remettre les données sur la même ligne.
dans ce cas là tu peux peut-être modifier ta ligne en double cliquant dessus,
puis ouvrir une userform avec les données de la ligne
tout cela lors de l'événement before double clic,
et ce sera ainsi beaucoup plus facile à gérer.
si je n'ai pas bien compris, précise ton projet.
je doute un peu que tu puisses faire ta modification avec le userform de création,
de manière simple et efficace.
lorsque tu crées un nouvel enregistrement, tu insères ta ligne en bas de feuille,
du moins je suppose.
lorsque tu modifies, tu dois remettre les données sur la même ligne.
dans ce cas là tu peux peut-être modifier ta ligne en double cliquant dessus,
puis ouvrir une userform avec les données de la ligne
tout cela lors de l'événement before double clic,
et ce sera ainsi beaucoup plus facile à gérer.
si je n'ai pas bien compris, précise ton projet.
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
16 janv. 2007 à 12:33
16 janv. 2007 à 12:33
bonjour
je pense que pour simplifier mon formulaire je dois rappeler toutes mes donées donc réutiliser un userform quasi identique à celui de création ?
C'est tout à fait cela, le formulaire est identique, mais la fonction est complètement différente.
je ne connais pas le code pour rappeler mes données dans un userform de modification,
Dans la feuille concernée, tu crées cette macro :
Public Sub Worksheet_BeforeDoubleClick(ByVal sel As Range, Cancel As Boolean)
la valeur sel.row te donnes la ligne sur laquelle sont tes données.
admettons que je saisie un nom, prénom, adresse, ville et cp
donc le nom est en colonne 1, le prénom est en colonne 2,etc...
Pour ramener, les données dans le formulaire tu mets :
user.nom = cells(sel.row,1).value avec user.nom remplacé par ta zone de formulaire.
idem pour le reste.
après modification, c'est l'inverse :
cells(sel.row,1).value = user.nom
voilà la base et bon courage pour la réalisation.
--
toujours zen
je pense que pour simplifier mon formulaire je dois rappeler toutes mes donées donc réutiliser un userform quasi identique à celui de création ?
C'est tout à fait cela, le formulaire est identique, mais la fonction est complètement différente.
je ne connais pas le code pour rappeler mes données dans un userform de modification,
Dans la feuille concernée, tu crées cette macro :
Public Sub Worksheet_BeforeDoubleClick(ByVal sel As Range, Cancel As Boolean)
la valeur sel.row te donnes la ligne sur laquelle sont tes données.
admettons que je saisie un nom, prénom, adresse, ville et cp
donc le nom est en colonne 1, le prénom est en colonne 2,etc...
Pour ramener, les données dans le formulaire tu mets :
user.nom = cells(sel.row,1).value avec user.nom remplacé par ta zone de formulaire.
idem pour le reste.
après modification, c'est l'inverse :
cells(sel.row,1).value = user.nom
voilà la base et bon courage pour la réalisation.
--
toujours zen
jc41
Messages postés
3
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
16 janvier 2007
16 janv. 2007 à 14:51
16 janv. 2007 à 14:51
tout d'abord merci de ton aide, j'ai saisie ta macro seulement j'ai une erreur de compilation qui survient pour simplifier la chose je te joint mon code de départ :
>pour le code feuille :
Private Sub lancemachinesvendues_Click()
MachinesVendues.Show
End Sub
Private Sub machinesvendues_Click()
End Sub
Private Sub Worksheet_beforedoubleclick(ByVal sel As Range, cancel As Boolean)
MachinesVendues = Cells(sel.Row, 1).Value
End Sub
>pour le userform :
Private Sub CmdAnnuler_Click()
Unload Me
End Sub
Private Sub CmdOK_Click()
'on teste la saisie du client...
If Me.TxtClient.Text = "" Then
MsgBox "vous devez entrer un client"
Me.TxtClient.SetFocus
Exit Sub
End If
'on teste la saisie du département...
If Me.TxtDpt.Text = "" Then
MsgBox "vous devez entrer un département"
Me.TxtDpt.SetFocus
Exit Sub
End If
'on teste la saisie de la marque...
If Me.TxtMarque.Text = "" Then
MsgBox "vous devez entrer la marque"
Me.TxtMarque.SetFocus
Exit Sub
End If
'on teste la saisie de la type...
If Me.Txttype.Text = "" Then
MsgBox "vous devez entrer le type"
Me.Txttype.SetFocus
Exit Sub
End If
'on teste la saisie de la N°Série...
If Me.Txtnserie.Text = "" Then
MsgBox "vous devez entrer un N° de série"
Me.Txtnserie.SetFocus
Exit Sub
End If
'on teste la saisie de l'année ...
If Me.Txtannee.Text = "" Then
MsgBox "vous devez entrer l'année"
Me.Txtannee.SetFocus
Exit Sub
End If
'on teste la saisie de la pression...
If Me.Txtpression.Text = "" Then
MsgBox "vous devez entrer la pression"
Me.Txtpression.SetFocus
Exit Sub
End If
'on teste la saisie de nbh/an...
If Me.Txtnbhan.Text = "" Then
MsgBox "vous devez entrer le nombre d'heure de fonctionnement par an"
Me.Txtnbhan.SetFocus
Exit Sub
End If
'on teste la saisie de nbh/cycle...
If Me.Txtnbhcycle.Text = "" Then
MsgBox "vous devez entrer le nombre d'heure par cycle d'entretien"
Me.Txtnbhcycle.SetFocus
Exit Sub
End If
'conversion du nom et prénom en NOMPROPRE
clientconverti = Application.WorksheetFunction.Proper(Me.TxtClient.Text)
marqueconverti = Application.WorksheetFunction.Proper(Me.TxtMarque.Text)
'mise en place des données dans la feuille de calcul
Range("a65536").End(xlUp).Offset(1, 0).Value = clientconverti
Range("c65536").End(xlUp).Offset(1, 0).Value = marqueconverti
Range("b65536").End(xlUp).Offset(1, 0).Value = Me.TxtDpt.Text
Range("d65536").End(xlUp).Offset(1, 0).Value = Me.Txttype.Text
Range("e65536").End(xlUp).Offset(1, 0).Value = Me.Txtnserie.Text
Range("f65536").End(xlUp).Offset(1, 0).Value = Me.Txtannee.Text
Range("g65536").End(xlUp).Offset(1, 0).Value = Me.Txtpression.Text
Range("h65536").End(xlUp).Offset(1, 0).Value = Me.Txtnbhan.Text
Range("i65536").End(xlUp).Offset(1, 0).Value = Me.Txtnbhcycle.Text
'on décharge le formulaire
Unload Me 'de cette facon à la prochaine saisie les textbox seront vides à l'ouverture
End Sub
Private Sub UserForm_Click()
End Sub
merci d'apporter les modifs nécessaire, avec une petite annotation pour que je puisses comprendre mes erreurs. Encore une fois merci.
>pour le code feuille :
Private Sub lancemachinesvendues_Click()
MachinesVendues.Show
End Sub
Private Sub machinesvendues_Click()
End Sub
Private Sub Worksheet_beforedoubleclick(ByVal sel As Range, cancel As Boolean)
MachinesVendues = Cells(sel.Row, 1).Value
End Sub
>pour le userform :
Private Sub CmdAnnuler_Click()
Unload Me
End Sub
Private Sub CmdOK_Click()
'on teste la saisie du client...
If Me.TxtClient.Text = "" Then
MsgBox "vous devez entrer un client"
Me.TxtClient.SetFocus
Exit Sub
End If
'on teste la saisie du département...
If Me.TxtDpt.Text = "" Then
MsgBox "vous devez entrer un département"
Me.TxtDpt.SetFocus
Exit Sub
End If
'on teste la saisie de la marque...
If Me.TxtMarque.Text = "" Then
MsgBox "vous devez entrer la marque"
Me.TxtMarque.SetFocus
Exit Sub
End If
'on teste la saisie de la type...
If Me.Txttype.Text = "" Then
MsgBox "vous devez entrer le type"
Me.Txttype.SetFocus
Exit Sub
End If
'on teste la saisie de la N°Série...
If Me.Txtnserie.Text = "" Then
MsgBox "vous devez entrer un N° de série"
Me.Txtnserie.SetFocus
Exit Sub
End If
'on teste la saisie de l'année ...
If Me.Txtannee.Text = "" Then
MsgBox "vous devez entrer l'année"
Me.Txtannee.SetFocus
Exit Sub
End If
'on teste la saisie de la pression...
If Me.Txtpression.Text = "" Then
MsgBox "vous devez entrer la pression"
Me.Txtpression.SetFocus
Exit Sub
End If
'on teste la saisie de nbh/an...
If Me.Txtnbhan.Text = "" Then
MsgBox "vous devez entrer le nombre d'heure de fonctionnement par an"
Me.Txtnbhan.SetFocus
Exit Sub
End If
'on teste la saisie de nbh/cycle...
If Me.Txtnbhcycle.Text = "" Then
MsgBox "vous devez entrer le nombre d'heure par cycle d'entretien"
Me.Txtnbhcycle.SetFocus
Exit Sub
End If
'conversion du nom et prénom en NOMPROPRE
clientconverti = Application.WorksheetFunction.Proper(Me.TxtClient.Text)
marqueconverti = Application.WorksheetFunction.Proper(Me.TxtMarque.Text)
'mise en place des données dans la feuille de calcul
Range("a65536").End(xlUp).Offset(1, 0).Value = clientconverti
Range("c65536").End(xlUp).Offset(1, 0).Value = marqueconverti
Range("b65536").End(xlUp).Offset(1, 0).Value = Me.TxtDpt.Text
Range("d65536").End(xlUp).Offset(1, 0).Value = Me.Txttype.Text
Range("e65536").End(xlUp).Offset(1, 0).Value = Me.Txtnserie.Text
Range("f65536").End(xlUp).Offset(1, 0).Value = Me.Txtannee.Text
Range("g65536").End(xlUp).Offset(1, 0).Value = Me.Txtpression.Text
Range("h65536").End(xlUp).Offset(1, 0).Value = Me.Txtnbhan.Text
Range("i65536").End(xlUp).Offset(1, 0).Value = Me.Txtnbhcycle.Text
'on décharge le formulaire
Unload Me 'de cette facon à la prochaine saisie les textbox seront vides à l'ouverture
End Sub
Private Sub UserForm_Click()
End Sub
merci d'apporter les modifs nécessaire, avec une petite annotation pour que je puisses comprendre mes erreurs. Encore une fois merci.
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
16 janv. 2007 à 17:44
16 janv. 2007 à 17:44
bonjour
j'ai une erreur de compilation qui survient
dans ce cas là tu est positionné sur l'erreur et il faudrait donner la ligne de code.
ce doit être là MachinesVendues = Cells(sel.Row, 1).Value
"MachinesVendues" c'est le nom de ta grille (form)
l'appellation de ta zone c'est quelque chose comme "Me.TxtDpt.Text "
dans "Cells(sel.Row, 1).Value" le 1 désigne la colonne,
mais pour que ton code te permette de déplacer tes colonnes,
il faudrait nommer la colonne des noms, par ex "patro"
et alors tu peux mettre "Cells(sel.Row, range("patro").column).Value"
et si tu insére une colonne avant ta colonne "patro",
ton code continue de fonctionner sans problème.
de même Range("a65536").End(xlUp).Offset(1, 0).Value = clientconverti
devient
Cells(65536, Range("patro").Column).End(xlUp).Offset(1, 0).Value = clientconverti
bon courage et à bientôt.
j'ai une erreur de compilation qui survient
dans ce cas là tu est positionné sur l'erreur et il faudrait donner la ligne de code.
ce doit être là MachinesVendues = Cells(sel.Row, 1).Value
"MachinesVendues" c'est le nom de ta grille (form)
l'appellation de ta zone c'est quelque chose comme "Me.TxtDpt.Text "
dans "Cells(sel.Row, 1).Value" le 1 désigne la colonne,
mais pour que ton code te permette de déplacer tes colonnes,
il faudrait nommer la colonne des noms, par ex "patro"
et alors tu peux mettre "Cells(sel.Row, range("patro").column).Value"
et si tu insére une colonne avant ta colonne "patro",
ton code continue de fonctionner sans problème.
de même Range("a65536").End(xlUp).Offset(1, 0).Value = clientconverti
devient
Cells(65536, Range("patro").Column).End(xlUp).Offset(1, 0).Value = clientconverti
bon courage et à bientôt.
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
17 janv. 2007 à 22:01
17 janv. 2007 à 22:01
bonjour
Private Sub Worksheet_beforedoubleclick(ByVal sel As Range, cancel As Boolean)
Me.TxtClient.Text = Cells(sel.Row, 1).Value
C'est normal qu'il y ait erreur, car tu n'as pas lancé ton userform,
et Me.TxtClient.Text n'est pas connu.
tu dois mettre avant : grille_modifs.Show
ensuite tu documentes tes zones, et ta macro est terminée.
C'est la validation de la saisie de ta grille qui déclenchera
la mise à jour ou l'abandon et donc tu dois avoir dans ta grille
une zone qui enregistre la ligne à mettre à jour et
cela peut être une zone non affichée (visible à false).
@+
Private Sub Worksheet_beforedoubleclick(ByVal sel As Range, cancel As Boolean)
Me.TxtClient.Text = Cells(sel.Row, 1).Value
C'est normal qu'il y ait erreur, car tu n'as pas lancé ton userform,
et Me.TxtClient.Text n'est pas connu.
tu dois mettre avant : grille_modifs.Show
ensuite tu documentes tes zones, et ta macro est terminée.
C'est la validation de la saisie de ta grille qui déclenchera
la mise à jour ou l'abandon et donc tu dois avoir dans ta grille
une zone qui enregistre la ligne à mettre à jour et
cela peut être une zone non affichée (visible à false).
@+
bonjour,
je commence en vb. je me suis donc appuyez sur votre sujet pour effectuer le même procédé a mon formulaire.
Hors j'obtiens une erreur d'execution 424', voici mon bout de code :
Public Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
UserForm1.Show
UserForm1.TextBox1.Value = Cells(sel.Row, 3).Value Erreur d'éxecution '424'
UserForm1.ComboBox22.Value = Cells(sel.Row, 4).Value
UserForm1.TextBox2.Value = Cells(sel.Row, 5).Value
UserForm1.TextBox3.Value = Cells(sel.Row, 6).Value
UserForm1.TextBox27.Value = Cells(sel.Row, 7).Value
UserForm1.TextBox28.Value = Cells(sel.Row, 8).Value
UserForm1.TextBox13.Value = Cells(sel.Row, 9).Value
UserForm1.ComboBox6.Value = Cells(sel.Row, 10).Value
UserForm1.TextBox5.Value = Cells(sel.Row, 11).Value
UserForm1.TextBox6.Value = Cells(sel.Row, 12).Value
UserForm1.TextBox14.Value = Cells(sel.Row, 13).Value
UserForm1.TextBox7.Value = Cells(sel.Row, 14).Value
UserForm1.TextBox8.Value = Cells(sel.Row, 15).Value
UserForm1.TextBox9.Value = Cells(sel.Row, 16).Value
UserForm1.TextBox24.Value = Cells(sel.Row, 18).Value
UserForm1.TextBox25.Value = Cells(sel.Row, 19).Value
UserForm1.TextBox26.Value = Cells(sel.Row, 20).Value
UserForm1.ComboBox20.Value = Cells(sel.Row, 22).Value
UserForm1.ComboBox21.Value = Cells(sel.Row, 23).Value
End Sub
je commence en vb. je me suis donc appuyez sur votre sujet pour effectuer le même procédé a mon formulaire.
Hors j'obtiens une erreur d'execution 424', voici mon bout de code :
Public Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
UserForm1.Show
UserForm1.TextBox1.Value = Cells(sel.Row, 3).Value Erreur d'éxecution '424'
UserForm1.ComboBox22.Value = Cells(sel.Row, 4).Value
UserForm1.TextBox2.Value = Cells(sel.Row, 5).Value
UserForm1.TextBox3.Value = Cells(sel.Row, 6).Value
UserForm1.TextBox27.Value = Cells(sel.Row, 7).Value
UserForm1.TextBox28.Value = Cells(sel.Row, 8).Value
UserForm1.TextBox13.Value = Cells(sel.Row, 9).Value
UserForm1.ComboBox6.Value = Cells(sel.Row, 10).Value
UserForm1.TextBox5.Value = Cells(sel.Row, 11).Value
UserForm1.TextBox6.Value = Cells(sel.Row, 12).Value
UserForm1.TextBox14.Value = Cells(sel.Row, 13).Value
UserForm1.TextBox7.Value = Cells(sel.Row, 14).Value
UserForm1.TextBox8.Value = Cells(sel.Row, 15).Value
UserForm1.TextBox9.Value = Cells(sel.Row, 16).Value
UserForm1.TextBox24.Value = Cells(sel.Row, 18).Value
UserForm1.TextBox25.Value = Cells(sel.Row, 19).Value
UserForm1.TextBox26.Value = Cells(sel.Row, 20).Value
UserForm1.ComboBox20.Value = Cells(sel.Row, 22).Value
UserForm1.ComboBox21.Value = Cells(sel.Row, 23).Value
End Sub
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
22 juil. 2011 à 19:33
22 juil. 2011 à 19:33
bonjour,
Avec cette modif (en gras), cela devrait mieux fonctionner :
Avec cette modif (en gras), cela devrait mieux fonctionner :
Public Sub Worksheet_BeforeDoubleClick(ByVal sel As Range, Cancel As Boolean)
16 janv. 2007 à 08:03
c'est tout à fait mon besoin, mais je ne connais pas le code pour rappeler mes données dans un userform de modification, admettons que je saisie un nom, prénom, adresse, ville et cp, pour un changement d'adresse je dois modifier les champs adresse ville et cp. maintenant un mariage je dois modifier le nom. je pense que pour simplifier mon formulaire je dois rappeler toutes mes donées donc réutiliser un userform quasi identique à celui de création ?
Merci de votre aide.