Décalage enregistrement
Bonsoir à tous,
J'ai un problème avec ce code gentiment fourni par "La Céline":
Private Sub Modification_Click()
Dim i As Integer
With ThisWorkbook.Sheets("Feuil2")
i = LeID
.Range("B" & i).Value = Me.TBoxNom.Value
.Range("C" & i).Value = Me.TBoxPrenom.Value
.Range("D" & i).Value = Me.TBoxTelFixe.Value
.Range("E" & i).Value = Me.TBoxTelMobile.Value
.Range("F" & i).Value = Me.TBoxAdresse.Value
.Range("G" & i).Value = Me.ComboVille.Value
.Range("H" & i).Value = Me.TBoxCodPost.Value
End With
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
Dim PlageDeRecherche As Range
Dim Trouve As Range
Dim Valeur_Cherchee As String
Dim AdresseTrouvee As String
On Error Resume Next
' demande le ID à rechercher
LeID = InputBox("Quel ID voulez-vous modifier ? ")
' dans quel feuille
With ThisWorkbook.Sheets("Feuil2")
'dans la première colonne de la feuille active
Set PlageDeRecherche = .Columns(1)
'*******************************
'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRecherche.Cells.Find(what:=LeID, LookAt:=xlWhole)
'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then
'ici, traitement pour le cas où la valeur n'est pas trouvée
MsgBox " Le ID " & LeID & " n'est pas présent dans la colonne " & PlageDeRecherche.Address
End
Else
'ici, traitement pour le cas où la valeur est trouvée
AdresseTrouvee = Trouve.Row
i = AdresseTrouvee
Me.TBoxNom.Value = .Range("B" & i).Value
Me.TBoxPrenom.Value = .Range("C" & i).Value
Me.TBoxTelFixe.Value = .Range("D" & i).Value
Me.TBoxTelMobile.Value = .Range("E" & i).Value
Me.TBoxAdresse.Value = .Range("F" & i).Value
Me.ComboVille.Value = .Range("G" & i).Value
Me.TBoxCodPost.Value = .Range("H" & i).Value
End If
End With
'vidage des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
End Sub
Lorsque je choisi l'ID à modifier, au moment de la validation des modifs, L'enregistrement se décale vers le bas et en remplace un autre autre !!!!!
d'autre part, je n'ai plus de liaison entre la liste déroulante du champ "ville" avec la liste de la "feuil1"
trois heures que je cherche, un petit coup de main serait le bien venu.
Je joint mon fichier pour plus de compréhension.
Merci de votre aide
atlonia a écrit :Private Sub Modification_Click() Dim i As Integer With ThisWorkbook.Sheets("Feuil2") i = LeID .Range("B" & i).Value = Me.TBoxNom.Value .Range("C" & i).Value = Me.TBoxPrenom.Value .Range("D" & i).Value = Me.TBoxTelFixe.Value .Range("E" & i).Value = Me.TBoxTelMobile.Value .Range("F" & i).Value = Me.TBoxAdresse.Value .Range("G" & i).Value = Me.ComboVille.Value .Range("H" & i).Value = Me.TBoxCodPost.Value End With Unload Me End Sub
L'erreur se trouve à la 4ème ligne i = LeID où il y a confusion entre n° de ligne et n° ID !
Corrige comme suit :
En clair :
- ajoute
Public AdresseTrouvee As Integer - enlève
Dim AdresseTrouvee As Stringdans initialize - modifie comme suit
i = AdresseTrouvee
Option Explicit
Public LeID As Integer
Public AdresseTrouvee As Integer
Private Sub Annulation_Click()
End
End Sub
Private Sub ComboVille_Change()
End Sub
Private Sub Modification_Click()
Dim i As Integer
With ThisWorkbook.Sheets("Feuil2")
i = AdresseTrouvee
.Range("B" & i).Value = Me.TBoxNom.Value
.Range("C" & i).Value = Me.TBoxPrenom.Value
.Range("D" & i).Value = Me.TBoxTelFixe.Value
.Range("E" & i).Value = Me.TBoxTelMobile.Value
.Range("F" & i).Value = Me.TBoxAdresse.Value
.Range("G" & i).Value = Me.ComboVille.Value
.Range("H" & i).Value = Me.TBoxCodPost.Value
End With
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
Dim PlageDeRecherche As Range
Dim Trouve As Range
Dim Valeur_Cherchee As String
On Error Resume Next
' demande le ID à rechercher
LeID = InputBox("Quel ID voulez-vous modifier ? ")
' dans quel feuille
With ThisWorkbook.Sheets("Feuil2")
'dans la première colonne de la feuille active
Set PlageDeRecherche = .Columns(1)
'*******************************
'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRecherche.Cells.Find(what:=LeID, LookAt:=xlWhole)
'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then
'ici, traitement pour le cas où la valeur n'est pas trouvée
MsgBox " Le ID " & LeID & " n'est pas présent dans la colonne " & PlageDeRecherche.Address
End
Else
'ici, traitement pour le cas où la valeur est trouvée
AdresseTrouvee = Trouve.Row
i = AdresseTrouvee
Me.TBoxNom.Value = .Range("B" & i).Value
Me.TBoxPrenom.Value = .Range("C" & i).Value
Me.TBoxTelFixe.Value = .Range("D" & i).Value
Me.TBoxTelMobile.Value = .Range("E" & i).Value
Me.TBoxAdresse.Value = .Range("F" & i).Value
Me.ComboVille.Value = .Range("G" & i).Value
Me.TBoxCodPost.Value = .Range("H" & i).Value
End If
End With
'vidage des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
End SubMerci beaucoup Steelson,
Ta solution fonctionne parfaitement; tu me sort une belle épine du pied...!
Peut-tu STP m'expliquer tes modifs pour que je comprennes mieux ?
Et serait-ce abuser de te demander si tu as une solution Pour ma "listebox" qui ne s'affiche pas dans le champ ville, car j'ai essayé un "Copier/Collé" du UserForm "Form_Ajout", mais ça ne fonctionne pas...!
Merci encore pour ton aide.
atlonia
Je pense que tu as compris : tu confondais le n°ID et le n° de ligne.
Lors de la recherche d'un ID c'était parfait ! mais ensuite tu reprenais le n°ID (et non pas la ligne à laquelle il a été trouvé) comme n° de ligne. Tu avais un décalage de 1 car tes n° de ID se suivaient à partir d ela ligne 2, mais on aurait pu avoir beaucoup plus d'écart positif ou négatif, ou tomber sur le bon cas si le n°ID se trouvait justement à la ligne correspondante !!
Donc, en résumé, pour sauvegarder la ligne trouvée, j'ai passé la variable de façon à ce qu'elle soit partagée par les différentes procédures en la mettant en Public et en enlevant sa déclaration dans la procédure de recherche. Ensuite j'ai utilisé cette variable à la place de ID dans la procédure de modification.
atlonia a écrit :Et serait-ce abuser de te demander si tu as une solution Pour ma "listebox" qui ne s'affiche pas dans le champ ville, car j'ai essayé un "Copier/Collé" du UserForm "Form_Ajout", mais ça ne fonctionne pas...!
Pas bien compris, poste un nouveau sujet pour solliciter d'autres personnes.
Merci mille fois pour ton aide et ta patience.
Merci aussi pour ton explication, je débute en VBA et ne vois pas encore clairement les erreurs!
Je vais suivre ton conseil, et faire un autre poste pour ma "listebox".