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 String dans 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 Sub

Merci 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".

Rechercher des sujets similaires à "decalage enregistrement"