Bonjour à tous,
Je cherche, mais j'ai l'impression que c'est pas possible. :calim2:
Pièce jointe 646894
fichier: (clic droit dans le classeur, sélectionner un nom, cliquer sur modifier)
Pièce jointe 646896
Merci pour votre aide
Cdt
Version imprimable
Bonjour à tous,
Je cherche, mais j'ai l'impression que c'est pas possible. :calim2:
Pièce jointe 646894
fichier: (clic droit dans le classeur, sélectionner un nom, cliquer sur modifier)
Pièce jointe 646896
Merci pour votre aide
Cdt
Bonjour, comme ceci:
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 Private Sub modifClt_click() 'MODIFIER CLIENT Dim i As Long, plg As Range, ws1 As Worksheet, cell As Range Application.ScreenUpdating = False Set ws1 = Sheets("Clients") Dim codeClient As Variant Dim rechercheRange As Range codeClient = Me.codClt.Value Set rechercheRange = ws1.ListObjects("Clts").ListColumns("Code client").DataBodyRange For i = 1 To rechercheRange.Rows.Count If rechercheRange.Cells(i, 1).Value = codeClient Then ' Correspondance trouvée, i contient le numéro de ligne Exit For End If Next i MsgBox i With [Clts].ListObject .ListColumns("Nom").DataBodyRange(i) = Me.nomClt.Value .ListColumns("Adresse").DataBodyRange(i) = Me.adrClt.Value .ListColumns("Code postal").DataBodyRange(i) = Me.CPclt.Value .ListColumns("Ville").DataBodyRange(i) = Me.villClt.Value .ListColumns("Email").DataBodyRange(i) = Me.mailClt.Value .ListColumns("Tel").DataBodyRange(i) = Me.telClt.Value End With ws1.Activate Set plg = Range(Cells(i + 1, 1), Cells(i + 1, 7)) If Not plg Is Nothing Then plg.Select ActiveWindow.ScrollRow = plg.Row End If 'tri alphab plage sur le nom With Range("Clts").ListObject .DataBodyRange.Sort Key1:=.ListColumns("Nom").DataBodyRange, Order1:=xlAscending, Header:=xlYes End With 'annonce MsgBox "Modifications Enregistrées." Unload Me Application.ScreenUpdating = True End Sub
Bonjour Franc,
Merci pour ta réponse.
Mais çà marche pas.:calim2: , le codeCitation:
' Correspondance trouvée, i contient le numéro de ligne
me donneCode:
1
2
3
4
5
6
7
8
9
10 Dim i As Long, plg As Range, ws1 As Worksheet, cell As Range Dim codeClient As Variant Dim rechercheRange As Range Application.ScreenUpdating = False Set ws1 = Sheets("Clients") codeClient = Me.codClt.Value Set rechercheRange = ws1.ListObjects("Clts").ListColumns("Code client").DataBodyRange For i = 1 To rechercheRange.Rows.Count If rechercheRange.Cells(i, 1).Value = codeClient Then MsgBox i
Pièce jointe 646969
Donc en ligne précédente.
Et est-ce que c'est plus rapide que le code classique avec
MerciCode:ws1.Range("B" & i).Value=Me.nomClt.Value
Bonjour
ce que tu récupères est l'index dans le databodyrange donc dans la plage de données. C'est donc bien la 74 ème ligne du tableau de données, qui n'est par la 74 ème ligne de la sheet compte tenu des entêtes (et potentiellement de la position du tableau).
Pour être cohérent il faut rester dans la syntaxe des tableaux structurés et remplacer :
par exemple parCode:ws1.Range("B" & i).Value=Me.nomClt.Value
Code:ws1.ListObjects("Clts").ListColumns("Code client").DataBodyRange.cells(i).value = Me.nomClt.Value
Je n'ai rien à ajouter à l'explication de Tête de chat, maintenant si tu veux afficher la ligne correspondant à la ligne de la feuille, il te suffit d'ajouter le décalage entre le databodyrange et la feuille, dans le cas présent 1 et donc msgbox i+1.
Bonjour Tête de chat,
Je comprends mieux maintenant, çà fonctionne.
Et merci pour m'avoir donné le code dans la boucle, il est pas simple.
Cdt