Recherche immatriculation dans une liste Excel avec VBA project [Résolu]

SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention - 5 juin 2014 à 09:38 - Dernière réponse : SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention
- 6 juin 2014 à 16:42
Bonjour,


Je voudrais créer une Base de données pour les véhicules de fonction de mon entreprise. Cette base de données devra être exploitable via une mini application à l'aide d'UserForm.


Pour cela, j'ai créé trois feuilles Excel:
- Véhicule (dans laquelle toutes les informations de chaque véhicule apparaît)
- Facture (dans laquelle toutes les factures de tous les véhicules apparaît ==> aucun tri n'est effectué pour le moment)
- Sinistre (dans laquelle tous les sinistres apparaissent ==> aucun tri n'est effectué pour le moment)


J'ai donc créé plusieurs UserForm.

L'un de ces UserForme1 correspond à une zone de texte dans laquelle nous devrons insérer l'immatriculation, ensuite click sur "rechercher" et le but est de trouver les infos du véhicule situées dans la feuille excel "Véhicule"


Exemple de colonnes de ma feuille excel " véhicule " :

Colonne A : immatriculation
Colonne B : Marque
Colonne C : Type
Colonne D : Puissance fiscale
Colonne E : Mise en circulation



Une fois le véhicule trouvé dans la liste , le but est d'ouvrir un autre UserForm dans lequel toutes les infos des colonnes seraient répertoriées. J'ai donc créé un autre UserForme2 dans lequel des textbox vont correspondre à chacunes des infos collectées.


==> Je n'arrive pas à trouver la ligne de code correspondant à mon UserForm1 permettant de rechercher les données et de les insérer dans mon UserForm2.




Il s'agit d'un projet de fin d'étude très important pourriez-vous m'aider?

Merci d'avance !
Afficher la suite 

Votre réponse

22 réponses

jordane45 22906 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 5 juin 2014 à 10:17
0
Merci
Bonjour,

Tu postes dans la setion générique Visual Basic... hors tu nous parles d'excel... c'est donc que tu dev en VBA ?!

Je déplace ta discussion dans la bonne section du forum.



Pour ce qui est de ta question :
Je n'arrive pas à trouver la ligne de code correspondant à mon UserForm1 permettant de rechercher les données et de les insérer dans mon UserForm2.

la ligne de code correspondant à mon UserForm1 permettant de rechercher les données
ça ne sera surement pas qu'une seule ligne de code....
Il faut que tu regardes la méthode FIND

les insérer dans mon UserForm2
C'est de la manipulation basique de userform.
Userform2.TextBox1.value = "Mon blabla"





SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention - 5 juin 2014 à 10:22
Je passe par Visual Basic dans Excel 2010 pour créer une mini appli

je ne connaissais rien au langage VBA avant ce projet donc je ne suis pas très douée ... Donc même une méthode basique me paraît compliquée ..

Quelles sont les règles pour la méthode Find ?

Merci de votre réponse
Commenter la réponse de jordane45
jordane45 22906 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 5 juin 2014 à 10:42
0
Merci
Bonjour,

Il existe deux choses pratiques à connaitre lorsque l'on dev en VBA :
1 - L'aide ( accessible via le bouton F1 ... lorsque l'on selectionne un mot dans son code il nous amène directement sur sa définition...)

2 - L'enregistreur de macros : Qui permet d'enregistrer une macro correspondante aux actions que nous réalisons dans Excel. ... Si tu fais un CTRL + F dans ton classeur... il t'écrira le code correspondant à une recherche par exemple.
=> Même si le code est bien souvent à "adapter" pour que l'on puisse l'utiliser ensuite dans nos macros... il montre relativement bien comment coder la plus part des fonctions.


Pour la méthode Find, une petite recherche sur le net te donnera des exemples d'utilisation sans trop de difficulté.

Par exemple : http://jr.loucan.fr/e107_plugins/forum/forum_viewtopic.php?11

Dans un MODUL :
'Tu déclares en Public les variables : vcLig et vcCol
Public vcLig As Integer
Public vcCol As Integer

Function cherchC(nomF As String, valCherch As String) As Boolean
'fonction de recherche...
'**********************************************************
' recherche la valeur 'valCherch' et nous indique le
' N° de ligne et de Colonne où elle se trouve VcLig / VcCol
'**********************************************************
Dim vc As Variant
Sheets(nomF).Activate
Sheets(nomF).Cells(1, 1).Activate
Set vc = Cells.Find(what:=valCherch, lookAt:=xlWhole, After:=ActiveCell, SearchOrder:=xlByColumns, SearchDirection:=xlNext, LookIn:=xlValues, MatchCase:=False, SearchFormat:=False)
If Not vc Is Nothing Then
vcCol = vc.Column
vcLig = vc.Row
cherchC = True
End If
End Function


'----------------------------------------
'Exemple d'utilisation
'----------------------------------------
Sub Test()
Dim recherche As Boolean

recherche = cherchC("Feuil1", "toto")

If recherche = True Then
    MsgBox ("Valeur trouvée en : ligne: " & vcLig & "  Colonne: " & vcCol)
Else
    MsgBox ("Aucun résultat trouvé")
End If


End Sub




SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention - 5 juin 2014 à 11:34
Bonjour,

Merci de votre réponse !

J'y suis depuis ... 30 min et je n'y arrive toujours pas (je dois vraiment être nulle !)


--------------------------------------------------------------------------------------------


De base j'avais trouvé des lignes de code de ce genre :


Private Sub CommandButton1_Click()

Dim x As Integer
x = 0
Do

If TextBox1.Value = Sheets("Véhicules").Range("A2").Offset(0, x) Then
Else
Sheets("Véhicules").Range("A2").Offset(x, 0).Select
x = x + 1
End If
Loop Until a = Sheets("Véhicules").Range("A2").Offset(0, x)

ModificationVéhicule1.Show

ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").Range("A2")
ModificationVéhicule1.TextBox2.Value = Sheets("Véhicules").Range("B2")
ModificationVéhicule1.TextBox3.Value = Sheets("Véhicules").Range("C2")
ModificationVéhicule1.TextBox4.Value = Sheets("Véhicules").Range("D2")
ModificationVéhicule1.TextBox5.Value = Sheets("Véhicules").Range("E2")
ModificationVéhicule1.TextBox6.Value = Sheets("Véhicules").Range("F2")
ModificationVéhicule1.TextBox7.Value = Sheets("Véhicules").Range("G2")
ModificationVéhicule1.TextBox8.Value = Sheets("Véhicules").Range("H2")
ModificationVéhicule1.TextBox9.Value = Sheets("Véhicules").Range("I2")
ModificationVéhicule1.TextBox10.Value = Sheets("Véhicules").Range("J2")
ModificationVéhicule1.TextBox11.Value = Sheets("Véhicules").Range("K2")
ModificationVéhicule1.TextBox12.Value = Sheets("Véhicules").Range("L2")
ModificationVéhicule1.TextBox13.Value = Sheets("Véhicules").Range("M2")

Unload Me

End Sub


------------------------------------------------------------------------------



Biensure ça ne marche pas non plus !

Avec vos lignes j'ai essayé d'adapter comme ceci :


Private Sub CommandButton1_Click()

Dim recherche As Boolean

recherche = cherchC("Feuil4", TextBox1.Value)


If recherche = True Then
    MsgBox ("Valeur trouvée en : ligne: " & vcLig & "  Colonne: " & vcCol)
Else
    MsgBox ("Aucun résultat trouvé")
End If


End Sub



----------------------------------------------------------------------------------


Pourriez-vous m'indiquer ce qui ne colle pas dans mes lignes?
jordane45 22906 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 5 juin 2014 à 11:42
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

J'édite ton message pour les y mettre... merci d'y penser à l'avenir.
Commenter la réponse de jordane45
jordane45 22906 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 5 juin 2014 à 11:56
0
Merci
Bonjour,

Par rapport à mon code :
1 - Est-ce que tu as créé un nouveau MODULE dans ton projet ?
2 - Y as tu déclaré en public les variables vcLig et vcCol ?
3 - Dans ton premier code tu utilises la feuille : "Véhicules" ... alors qu'avec mon code tu utilises la feuille : "Feuil4" ? .. pourquoi n'est-ce pas la même ?

Bien entendu... mon code te fais un MSGBOX.. il faut ajouter l'ajout dans tes textbox pour correspondre à tes besoins :

Private Sub CommandButton1_Click()

Dim recherche As Boolean
recherche = cherchC("Véhicules", TextBox1.Value)

If recherche = True Then
   ' MsgBox ("Valeur trouvée en : ligne: " & vcLig & "  Colonne: " & vcCol)
   'Colonne A ligne : vcLig
   ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").cells(vcLig,1)
   'Colonne B ligne : vcLig
   ModificationVéhicule1.TextBox2.Value = Sheets("Véhicules").cells(vcLig,2)

   ' Etc.....
Else
    MsgBox ("Aucun résultat trouvé")
End If


End Sub




Par rapport à TON code :

Tu utilises une boucle ( pourquoi pas.. mais c'est plus long qu'avec ma méthode..)
=> Que tu peux écrire sans le ELSE de la façon suivante :

Do
  If TextBox1.Value <> Sheets("Véhicules").Range("A2").Offset(0, x) Then
    Sheets("Véhicules").Range("A2").Offset(x, 0).Select
    x = x + 1
  End If
Loop Until a = Sheets("Véhicules").Range("A2").Offset(0, x)

.... Mais tel que tu utilises OFFSET ... là tu te déplaces vers la DROITE... donc tu cherches sur une LIGNE en te déplaçant de colonne en colonne...
Tu ne veux pas plutot chercher dans une colonne en regardant ligne par ligne ??
Si oui.. il faut que tu utilises OFFSET de la façon suivante :
Loop Until a = Sheets("Véhicules").Range("A2").Offset(x,0)



Par contre... une fois que tu as déterminé à quel "X" tu trouvais la valeur cherchée... tu ne t'en sers pas... ??!!
... tu mets dans tes textbox les valeurs se trouvant dans des cellules ciblées :
ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").Range("A2")

Hors je pense que tu veux mettre celles correspondant à la valeur cherchée :
ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").Range("A2").Offset(x,0)




Commenter la réponse de jordane45
SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention - 6 juin 2014 à 09:57
0
Merci
J'ai essayé avec ma méthode avec les modifications que vous m'avez décrites et au final le logiciel ne répond pas à chaque fois que j'essaye de le lancer

Pour votre méthode j'ai créé un nouveau module dans lequel j'ai déclaré:
Public vcLig As Integer
Public vcCol As Integer


Puis pour mon UserForm ("ModificationVéhicule") destiné à rechercher la plaque d'immatriculation j'ai créé les lignes de code suivant vos instructions:

nb: Le bouton grâce auquel je cherche l'immatriculation est "CommandButton1"

Private Sub CommandButton1_Click()


Dim recherche As Boolean
recherche = cherchC("Véhicules", TextBox1.Value)

If recherche = True Then
MsgBox ("Valeur trouvée en : ligne: " & vcLig & " Colonne: " & vcCol)


ModificationVéhicule1.Show

ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").Cells(vcCol, A)
ModificationVéhicule1.TextBox2.Value = Sheets("Véhicules").Cells(vcCol, B)
ModificationVéhicule1.TextBox3.Value = Sheets("Véhicules").Cells(vcCol, C)
ModificationVéhicule1.ComboBox1.Value = Sheets("Véhicules").Cells(vcCol, D)
ModificationVéhicule1.TextBox5.Value = Sheets("Véhicules").Cells(vcCol, E)
ModificationVéhicule1.TextBox4.Value = Sheets("Véhicules").Cells(vcCol, F)
ModificationVéhicule1.ComboBox2.Value = Sheets("Véhicules").Cells(vcCol, G)
ModificationVéhicule1.TextBox6.Value = Sheets("Véhicules").Cells(vcCol, H)
ModificationVéhicule1.TextBox8.Value = Sheets("Véhicules").Cells(vcCol, I)
ModificationVéhicule1.TextBox9.Value = Sheets("Véhicules").Cells(vcCol, J)
ModificationVéhicule1.TextBox10.Value = Sheets("Véhicules").Cells(vcCol, K)
ModificationVéhicule1.TextBox11.Value = Sheets("Véhicules").Cells(vcCol, L)
ModificationVéhicule1.TextBox12.Value = Sheets("Véhicules").Cells(vcCol, M)
Else
MsgBox ("Aucun résultat trouvé")
End If


End Sub



Message : erreur de compilation Sub ou Function non défini

L'utilisation de chiffres et de lettres pour une immatriculation n'a pas d'incidence sur la phase de recherche dans le fichier? Il faut que une fois l'immatriculation trouvée en colonne A , toutes les informations de la ligne (colonne B, C, D, E ....) soient répertoriées dans l'userForm "ModificationVéhicule1"

Encore merci de votre aide
jordane45 22906 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 6 juin 2014 à 10:04
Bon...
Il va falloir que tu commences à utiliser le mode PAS à PAS;...
Tu aurais compris que :
vcCol = numéro de COLONNE..... alors que toi.. tu cherches à quelle LIGNE se trouve l'immatriculation.
C'est donc vcLIG.. que tu dois utiliser.
De plus ... avec CELLS() ... tu dois utiliser des CHIFFRES..; pas des lettres.

' ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").Cells(vcCol, A)
' devient :

 ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").Cells(vcLigl, 1)
' etc...
SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention - 6 juin 2014 à 10:15
Private Sub CommandButton1_Click()


Dim recherche As Boolean
recherche = cherchC("Véhicules", TextBox1.Value)

If recherche = True Then
MsgBox ("Valeur trouvée en : ligne: " & vcLig & " Colonne: " & vcCol)


ModificationVéhicule1.Show

ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").Cells(cvLig, 1)
ModificationVéhicule1.TextBox2.Value = Sheets("Véhicules").Cells(vcLig, 2)
ModificationVéhicule1.TextBox3.Value = Sheets("Véhicules").Cells(vcLig, 3)
ModificationVéhicule1.ComboBox1.Value = Sheets("Véhicules").Cells(vcLig, 4)
ModificationVéhicule1.TextBox5.Value = Sheets("Véhicules").Cells(vcLig, 5)
ModificationVéhicule1.TextBox4.Value = Sheets("Véhicules").Cells(vcLig, 6)
ModificationVéhicule1.ComboBox2.Value = Sheets("Véhicules").Cells(vcLig, 7)
ModificationVéhicule1.TextBox6.Value = Sheets("Véhicules").Cells(vcLig, 8)
ModificationVéhicule1.TextBox8.Value = Sheets("Véhicules").Cells(vcLig, 9)
ModificationVéhicule1.TextBox9.Value = Sheets("Véhicules").Cells(vcLig, 10)
ModificationVéhicule1.TextBox10.Value = Sheets("Véhicules").Cells(vcLig, 11)
ModificationVéhicule1.TextBox11.Value = Sheets("Véhicules").Cells(vcLig, 12)
ModificationVéhicule1.TextBox12.Value = Sheets("Véhicules").Cells(vcLig, 13)
Else
MsgBox ("Aucun résultat trouvé")
End If


End Sub

Message : erreur de compilation Sub ou Function non défini
Surligné : "cherchC
Commenter la réponse de SandraMt
jordane45 22906 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 6 juin 2014 à 10:40
0
Merci
Message : erreur de compilation Sub ou Function non défini
Surligné : "cherchC
Et tu as bien mis dans un Module la fonction cherchC ?



Elle n'est bien présente qu'une seule fois dans ton projet ?

jordane45 22906 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 6 juin 2014 à 11:25
Ne serais tu pas un peu dyslexique ?? :-)

VCLIG et non CVLig...
    ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").Cells(cvLig, 1)

Devient :
    ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").Cells(vcLig, 1)


Je te le redis encore une fois.....
Lorsque tu as des soucis dans ton code.. la première chose à faire est de le tester en mode pas à pas... et de regarder la valeur des différentes variables.
SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention - 6 juin 2014 à 11:28
Faute de frappe (pas encore dyslexique xD) Sorry !
SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention - 6 juin 2014 à 11:32
Pour l'UserForm qui s'ouvre "ModificationVéhicule1" je dois mettre les lignes dans l'autre sens?

ModificationVéhicule1.TextBox1.Value = Sheets("Véhicules").Cells(cvLig, 1)

devient :

Sheets("Véhicules").Cells(cvLig, 1) = ModificationVéhicule1.TextBox1.Value
jordane45 22906 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 6 juin 2014 à 11:55
... je ne comprend pas ta question...

Pour mettre une valeur d'une cellule dans une texte box :
Userform1.textBox1.value = valeur de ma cellule


Pour mettre la valeur d'une textbox dans une cellule :
 Range("A1").value = Userform1.textBox1.value

 ' ou 

cells(1,1).value =  Userform1.textBox1.value
SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention - 6 juin 2014 à 16:25
Voila les lignes de code que j'ai inséré dans mon UserForm "ModificationVéhicule1" (dans lequel les informations récoltées apparaissent dans des TextBox :


Private Sub CommandButton2_Click()

Dim recherche As Boolean
recherche = cherchC("Véhicules", TextBox1.Value)

If recherche = True Then
MsgBox ("Valeur trouvée en : ligne: " & vcLig & " Colonne: " & vcCol)


Sheets("Véhicules").Cells(vcLig, 1) = TextBox1.Value
Sheets("Véhicules").Cells(vcLig, 2) = TextBox2.Value
Sheets("Véhicules").Cells(vcLig, 3) = TextBox3.Value
Sheets("Véhicules").Cells(vcLig, 4) = TextBox4.Value
Sheets("Véhicules").Cells(vcLig, 5) = TextBox5.Value
Sheets("Véhicules").Cells(vcLig, 6) = TextBox6.Value
Sheets("Véhicules").Cells(vcLig, 7) = TextBox7.Value
Sheets("Véhicules").Cells(vcLig, 8) = TextBox8.Value
Sheets("Véhicules").Cells(vcLig, 9) = TextBox9.Value
Sheets("Véhicules").Cells(vcLig, 10) = TextBox10.Value
Sheets("Véhicules").Cells(vcLig, 11) = TextBox11.Value
Sheets("Véhicules").Cells(vcLig, 12) = TextBox12.Value
Sheets("Véhicules").Cells(vcLig, 13) = TextBox13.Value

Else
MsgBox ("Aucun résultat trouvé")
End If


End Sub


Cependant, les informations entrées dans les textbox ne correspondent pas à chaque fois au bon véhicule.

J'ai fais plusieurs essais et dans la plupart des cas l'appli trouve le bon véhicule au deuxième essai ... Quelle en est la raison ?
Commenter la réponse de jordane45
SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention - 6 juin 2014 à 16:14
0
Merci
J'ai créé mon deuxième UserForm de sorte que les valeurs trouvées grâce aux lignes de codes précédentes remplissent des textbox

Userform1.textBox1.value = valeur de ma cellule

Que dois-je mettre comme code pour indiquer la valeur de la cellule est celle trouvée précédemment ?
Commenter la réponse de SandraMt
jordane45 22906 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 6 juin 2014 à 16:37
0
Merci
Je ne comprend plus rien....

Déjà ... est-ce que ta question initiale est résolue ? [ recherche immatriculation dans un classeur]
Si oui.. merci de mettre ce sujet en RESOLU (lien marquer comme résolu en dessous du titre de ta question).

Ensuite :
Pourquoi avoir créé un second userform ?
Pourquoi ne pas mettre dans un seul :
>> Une textbox dans laquelle tu entre l'immatriculation à chercher
>> Un bouton pour lancer la recherche
>> Puis Les textbox qui te serviront à afficher les valeurs trouvées ?


Un truc du style :


Quoi qu'il en soit... tu es en train de poser une "nouvelle" question..... hors sur ce forum nous conseillons ( voulons) qu'il n'y ait qu' UNE seule question par discussion... et il te faudra donc ouvrir un nouveau topic.


Commenter la réponse de jordane45
SandraMt 58 Messages postés jeudi 5 juin 2014Date d'inscription 2 juillet 2014 Dernière intervention - 6 juin 2014 à 16:42
0
Merci
C'est exactement ce que j'ai voulu faire (votre image) mais avec un UserForm pour l'immatriculation et un autre Userform pour les informations .

En effet l'apparance du votre est beaucoup plus pro que ce que j'avais fait (et j'aurais moins d'UserForm comme ca !)

La question étant différente je vais faire une nouvelle discussion.

Merci beaucoup
Commenter la réponse de SandraMt

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.