Bonjour à tous,
J'aimerai modifier ma macro pour que lorsque je clic sur une des ligne, le userform se lance et me permette de modifier la ligne de produit, pour que la date de modification se mette à jour.
Comment faire?
Merci
Version imprimable
Bonjour à tous,
J'aimerai modifier ma macro pour que lorsque je clic sur une des ligne, le userform se lance et me permette de modifier la ligne de produit, pour que la date de modification se mette à jour.
Comment faire?
Merci
Bonjour,
si ton problème c'est lancer une procédure sur double-clic voir : http://silkyroad.developpez.com/VBA/...Feuille/#LII-B
Mon probleme c'est plutot de récupérer les données de la ligne sélectionnée et que la date se modifie lorsque je valide
montre ton code d'ouverture Userform ... et mise à jour des champs.. cela tu as bien déjà du le faire ( utilise le paramètre Target de ta fonction événementielle)
Bonjour
dans le sub workbook doubleclic
il faut juste que appele une function qui récupère les instruction de la ligne selectionner, ou alors tu appel ton USF et tu met la fonction dedan
sa donne un truc du genre :PS : se code ne marchera surement pas, le but étant que tu comprenne se que tu doit faire et que tu l'adapte a ton besoin, par contre coter syntaxe je pense pas m'être trompé.Code:
1
2
3
4
5
6
7
8
9
10
11 function recup () dim ligne as integer dim colonne as integer colonne = 1 ligne = selection.row 'si tu veu la colonne tu fais la meme mais avec .columns contenu_a = cells(ligne,colonne) end function
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 Option Explicit 'Bouton QUITTER Private Sub CommandButton1_Click() Unload Me End Sub Private Sub CommandButton2_Click() Application.ScreenUpdating = False Worksheets("Feuil1").Activate Worksheets("Feuil1").Unprotect Dim L As Integer Dim Ligne As Long 'Ajout ou modification d'une ligne d'enregistrement With ThisWorkbook.Sheets(1) If Modification Then Ligne = ActiveCell.Row Else L = Sheets("Feuil1").Range("A65536").End(xlUp).Row + 1 End If Range("B" & L).Value = ComboBox1 Range("C" & L).Value = TextBox1 Range("D" & L).Value = TextBox2 If CheckBox1.Value = True Then Range("A" & L).Value = "x" Else Range("A" & L).Value = "" Range("F" & L).Value = Now 'filtre Columns("A:F").Select ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("B2:B496") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("C2:C496") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Feuil1").Sort .SetRange Range("A1:F496") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A1").Select Worksheets("Feuil1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingColumns:=True, AllowFormattingRows:=True End With Unload Me End Sub '///ajout et modif Private Sub UserForm_Initialize() Dim Ws As Worksheet Dim R As Range Dim C As Range Dim i As Integer Dim Coll As New Collection Dim Ligne As Long '--- Me.StartUpPosition = 2 '--- La bonne feuille et la bonne plage --- Set Ws = Sheets("Feuil1") Set R = Ws.Range("B2:B" & Ws.Range("B65536").End(xlUp).Row) '--- Enumère chaque cellule de la plage et les --- '--- place dans une collection (sans doublon) --- On Error Resume Next For Each C In R Coll.Add C, C Next C On Error GoTo 0 '--- Remplit la ComboBox --- For i = 1 To Coll.Count ComboBox1.AddItem Coll(i) Next i End Sub
c'est bien gentil mais ou est le code qui fait l'objet de ta question ? je ne vois pas de procédure événementielle Worksheet_BeforeDoubleClick !
C'est bien ca le probleme je ne sais pas faire, c'est pour ca que je demande votre aide
ok retourne au post #2 alors ...
je pense qu'il devrai aller la directement ...
http://silkyroad.developpez.com/VBA/...ntsFeuille/#LI
Pour ma lancer ma macro en double cliquant sur la ligne j'ai ca:
Mais comment faire pour récupérer les données de la ligne sur laquelle j'ai cliqué, et surtout comment faire pour modifier les valeur (les écraser) lorsque je valide?Code:
1
2
3
4 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True UserForm1.Show End Sub
dans le code de ton USF sert toi de ça pour avoir toute les info sur la ligne sélectionner que tu veux.
EXEMPLE :Code:
1
2
3
4
5
6
7
8
9
10
11 function recup () 'tu récupere les index ligne et colonne tablrécupération(1) = selection.column tablrécupération(0) = selection.row ' tu récupère le contenu tablrécupération(2) = cells(tablrécupération(0),tablrécupération(1)) recup = tablrécupération end function
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 sub USF_blabla() 'le debut de ton code... LigneSelectionné = recup(0) ColonneSelectionné = recup(1) Contenu =recup(2) 'la suite de ton code ... et si tu veux réecrir sur la case tu fais : cells(LigneSelectionné ,ColonneSelectionné ) = "je m'amuse"' la tu met ton nouveau contenu end sub
Bonjour,
Sans pouvoir tester le code (Excel 2003 donc filtrage ???) je ferrai comme ça pour transférer les valeurs des contrôles dans la feuille Excel :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 Private Sub CommandButton2_Click() Dim L As Integer Application.ScreenUpdating = False With Worksheets("Feuil1") .Activate .Unprotect L = .Range("A65536").End(xlUp).Row + 1 'ligne libre If Modification Then L = ActiveCell.Row 'si modif alors, redéfini L 'transfère les données .Range("B" & L).Value = ComboBox1.Text .Range("C" & L).Value = TextBox1.Text .Range("D" & L).Value = TextBox2.Text If CheckBox1.Value = True Then .Range("A" & L).Value = "x" Else .Range("A" & L).Value = "" .Range("F" & L).Value = Now 'filtre .Columns("A:F").Select .Sort.SortFields.Clear .Sort.SortFields.Add Key:=.Range("B2:B496"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .Sort.SortFields.Add Key:=.Range("C2:C496"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With .Sort .SetRange .Range("A1:F496") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With .Range("A1").Select .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True End With Application.ScreenUpdating = True Unload Me End Sub
Je me suis débrouillé en trouvant une macro que j'ai adaptée.
Merci de votre aide.