Bonjour à tous,
Je cherche, mais j'ai l'impression que c'est pas possible.
fichier: (clic droit dans le classeur, sélectionner un nom, cliquer sur modifier)
forum.xlsm
Merci pour votre aide
Cdt
Bonjour à tous,
Je cherche, mais j'ai l'impression que c'est pas possible.
fichier: (clic droit dans le classeur, sélectionner un nom, cliquer sur modifier)
forum.xlsm
Merci pour votre aide
Cdt
Bonjour, comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.' Correspondance trouvée, i contient le numéro de ligne, le code
me donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Donc en ligne précédente.
Et est-ce que c'est plus rapide que le code classique avec
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 par
Code : Sélectionner tout - Visualiser dans une fenêtre à part ws1.Range("B" & i).Value=Me.nomClt.Value
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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
Partager