VBA - Recherche/Modification/Enregistrer

Bonjour,

J'ai une des dernières versions excel (je précise)

Je rencontre un problème avec un de mes userform, je souhaiterais que celui me permette de faire une recherche, modifier ou ajouter mon parc de véhicule au nécessaire,

Cependant, lorsque je fais la recherche cela ne fonctionne pas, et pire, lorsque je clique sur modifier, cela me modife ma ligne du dessous ce qui efface les données d'un de mes véhicules que je dois resaisir à la main..

Voici l'image du l'userform pour avoir une meilleure idée :

image

Et voici les codes que j'ai saisie :

Private Sub Annuler_Click()

    'Annuler la saisie ou modification
Unload FrmParcVehicules
FrmParcVehicules.Show

End Sub

Private Sub Enregistrer_Click()

    'Enregister les données
    If TypeVehicule.Value = "" Then
MsgBox "Veuillez renseigner le champs   'Type "
Else
    If societe.Value = "" Then
MsgBox "Veuillez renseigner le champs   'Société"
Else
    If immatriculation.Value = "" Then
MsgBox "Veuillez renseigner le champs 'Immatriculation"
Else
    If assureurs.Value = "" Then
MsgBox "Veuillez renseigner le champs 'Assureurs"
Else

 'Enregister les données du formulaire sur la feuille
Dim ligne As Integer
Worksheets("ParcVehicule").Select
ligne = Sheets("ParcVehicule").Range("A456541").End(xlUp).Row + 1

'Enregistrer les données dans les cellules
Cells(ligne, 1) = TypeVehicule.Value
Cells(ligne, 2) = societe.Value
Cells(ligne, 3) = immatriculation.Value
Cells(ligne, 4) = marque.Value
Cells(ligne, 5) = modele.Value
Cells(ligne, 6) = utilisateur.Value
Cells(ligne, 7) = achat.Value
Cells(ligne, 8) = sortie.Value
Cells(ligne, 9) = assureurs.Value
Cells(ligne, 10) = contrat.Value
Cells(ligne, 11) = assurance.Value
Cells(ligne, 13) = ct.Value
Cells(ligne, 16) = cp.Value
Cells(ligne, 19) = identification.Value
Cells(ligne, 20) = commentaire.Value

Sheets("Accueil").Select

    MsgBox "Votre enregistrement a été réalisé"

    Unload FrmParcVehicules
    FrmParcVehicules.Show

End If
End If
End If
End If

End Sub

Private Sub Modifier_Click()

'Code pour le bouton Modifier
Dim modif As Integer
If Not immatriculation.Value = "" Then
Sheets("parcvehicules").Select
modif = immatriculation.ListIndex + 2

Cells(modif, 1) = TypeVehicule.Value
Cells(modif, 2) = societe.Value
Cells(modif, 3) = immatriculation.Value
Cells(modif, 4) = marque.Value
Cells(modif, 5) = modele.Value
Cells(modif, 6) = utilisateur.Value
Cells(modif, 7) = achat.Value
Cells(modif, 8) = sortie.Value
Cells(modif, 9) = assureurs.Value
Cells(modif, 10) = contrat.Value
Cells(modif, 11) = assurance.Value
Cells(modif, 13) = ct.Value
Cells(modif, 16) = cp.Value
Cells(modif, 19) = identification.Value
Cells(modif, 20) = commentaire.Value

MsgBox ("Modification effectuer")
Else

MsgBox ("Veuillez sélectionné l'immatriculation à modifier")

Exit Sub
End If

Unload FrmParcVehicules
FrmParcVehicules.Show

End Sub

Private Sub Recherche_Click()

'Code pour le bouton Recherche

If Not immatriculation.Value = "" Then
Dim no_ligne As Integer
no_ligne = immatriculation.ListIndex + 2

TypeVehicule.Value = Cells(no_ligne, 1).Value
societe.Value = Cells(no_ligne, 2).Value
immatriculation.Value = Cells(no_ligne, 3).Value
marque.Value = Cells(no_ligne, 4).Value
modele.Value = Cells(no_ligne, 5).Value
utilisateur.Value = Cells(no_ligne, 6).Value
achat.Value = Cells(no_ligne, 7).Value
sortie.Value = Cells(no_ligne, 8).Value
contrat.Value = Cells(no_ligne, 10).Value
assurance.Value = Cells(no_ligne, 11).Value
ct.Value = Cells(no_ligne, 13).Value
cp.Value = Cells(no_ligne, 16).Value
identification.Value = Cells(no_ligne, 19).Value
commentaire.Value = Cells(no_ligne, 20).Value

Else
End If

End Sub

Merci d'avance,

Cordialement

Bonjour,

Avec un fichier ce serait beaucoup plus simple pour nous, là on ne peut ni tester, in exécuter en pas à pas, ni poser d'espions sur les variables pour les suivre...

Par un truc simple:

Si ça modifie la ligne en dessous de celle voulue, le problème vient à coup sûr de l'initialisation du numéro de ligne pour modifier la valeur

modif = immatriculation.ListIndex + 2

sûrement à remplacer par:

modif = immatriculation.ListIndex + 1

Il faut probablement faire ça pour la recherche aussi comme j'ai vu une ligne de code très similaire.

no_ligne = immatriculation.ListIndex + 2

qui doit être écrit:

no_ligne = immatriculation.ListIndex + 1

D'ailleurs si tu veux réduire la taille de ton code, la modification et l'ajout se ressemblent beaucoup, la seule chose qui change c'est le numéro de ligne sur lequel tu écris, donc faire une procédure exprès pour l'export avec une variable ligne en entrée peut être utile, tout ce que tu aurais à faire avec tes boutons ajouter et modifier, c'est initialiser la variable et appeler la procédure d'export. Le code en doublon ça complique la lecture et rend la maintenance du code plus difficile également.

Je recommande également de faire vérifier l'orthographe à quelqu'un car j'ai vu des fautes trainer.

Bonjour merci beaucoup,

J'ai modifié ce que vous m'avez dit, je pense que le problème vient de ma recherche

Lorsque je clique sur le bouton cela m'enleve l'immatriculation que j'ai séléctionné et ne me mets aucune information de ce fait, mais je ne sais pas comment résoudre ça

Private Sub Recherche_Click()

'Code pour le bouton Recherche

If Not immatriculation.Value = "" Then
Dim no_ligne As Integer
no_ligne = immatriculation.ListIndex + 1

TypeVehicule.Value = Cells(no_ligne, 1).Value
societe.Value = Cells(no_ligne, 2).Value
immatriculation.Value = Cells(no_ligne, 3).Value
marque.Value = Cells(no_ligne, 4).Value
modele.Value = Cells(no_ligne, 5).Value
utilisateur.Value = Cells(no_ligne, 6).Value
achat.Value = Cells(no_ligne, 7).Value
sortie.Value = Cells(no_ligne, 8).Value
contrat.Value = Cells(no_ligne, 10).Value
assurance.Value = Cells(no_ligne, 11).Value
ct.Value = Cells(no_ligne, 13).Value
cp.Value = Cells(no_ligne, 16).Value
identification.Value = Cells(no_ligne, 19).Value
commentaire.Value = Cells(no_ligne, 20).Value

Else
End If

Je pense que ça vient des 3 premières ligne le "If not" ou quelque chose du style

Bonjour,

Le test avec le If est bon, il vérifie que la Liste ne soit pas vide pour ensuite charger les informations.

Je pense que le problème vient soit de la ligne, soit de la feuille, mais sans fichier je ne peux que spéculer...

Deux possibilités pour que le chargement se passe mal:

Le numéro de ligne n'est pas le bon, pour savoir s'il est bon, on prépare une expérience: on regarde où se trouve la ligne qui correspond à la première valeur de la liste, on note son numéro, on prend la première valeur de la liste, et on regarde si c'est le bon numéro.

Si une fois que la ligne est OK, il y a toujours un problème, c'est peut-être à cause de la feuille Active.

Je m'explique:

Quand on écrit

Cells(no_ligne, 1).Value

ça veut dire:

ActiveSheet.Cells(no_ligne, 1).Value

Quand on ne précise pas dans quelle feuille se trouve la cellule que l'on veut utiliser, ça prend par défaut la feuille affichée dans le classeur, si ce n'est pas celle qui contient la donnée, il faut alors préciser la feuille où elle est.

J'avoue pas trop avoir compris, j'ai réussi a vous isoler la partie du fichier concerné,

Je vous le mets ci-joint

Merci beaucoup de votre aide en tout cas !

19exemple.xlsm (158.19 Ko)

Je pense avoir réparé la recherche.

48exemple-1.xlsm (155.10 Ko)

C'était une histoire de feuille + la liste qui était mal initialisée, j'ai mis à jour la plage qui l'alimente, mis à jour l'initialisation du numéro de ligne, et mis à jour la partie qui charge les informations pour préciser la feuille.

Super merci énormément, tout fonctionne parfaitement !

Pas de souci,

merci d'avoir passé le sujet en résolu

Rechercher des sujets similaires à "vba recherche modification enregistrer"