Visual Basic : Afficher plusieurs factures pour une seule immat

Résolu
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014
- 11 juin 2014 à 15:45
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
- 17 juin 2014 à 17:01
Bonjour,

Suite à la création d'une application pour le suivi des véhicules de fonction de mon entreprise je voudrais créer un UserForm destiné aux Factures de chaques véhicules.

Dans un tableau Excel j'ai saisi sur chaque ligne :
Numéro de facture / Immatriculation / Date de la facture / Nature de l'intervention / Kilométrage / Montant / Remarques

Je voudrais que mon UserForm en recherchant la plaque d'immatriculation ressorte toutes les factures correspondant à ce véhicule.

Comment dois-je faire?

Merci à vous !

8 réponses

jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
11 juin 2014 à 18:22
Bonjour,

Là encore il va te falloir utiliser la méthode FIND.
(si tu regardes ton aide Excel sur ce mot.. tu y trouveras des exemples.).

Mais au cas où , voici une fonction FIndAll qui te permettra de rechercher TOUTES les factures d'une même immatriculation.
(A adapter à tes besoins bien entendu).

Function FindAll(ByVal sText As String, ByRef oSht As Worksheet, ByRef sRange As String, ByRef arMatches() As String) As Boolean
' --------------------------------------------------------------------------------------------------------------
' FindAll - To find all instances of the1 given string and return the row numbers.
' If there are not any matches the function will return false
' --------------------------------------------------------------------------------------------------------------
On Error GoTo Err_Trap
Dim rFnd As Range ' Range Object
Dim iArr As Integer ' Counter for Array
Dim rFirstAddress ' Address of the First Find
' -----------------
' Clear the Array
' -----------------
Erase arMatches
Set rFnd = oSht.Range(sRange).Find(what:=sText, LookIn:=xlValues, lookAt:=xlPart)

If Not rFnd Is Nothing Then
rFirstAddress = rFnd.Address
Do Until rFnd Is Nothing
iArr = iArr + 1
ReDim Preserve arMatches(iArr)
arMatches(iArr) = rFnd.Row 'rFnd.Address pour adresse complete ' rFnd.Row Pour N° de ligne
Set rFnd = oSht.Range(sRange).FindNext(rFnd)
If rFnd.Address = rFirstAddress Then Exit Do ' Do not allow wrapped search
Loop
FindAll = True
Else
' ----------------------
' No Value is Found
' ----------------------
FindAll = False
End If
' -----------------------
' Error Handling
' -----------------------
Err_Trap:
If Err <> 0 Then
MsgBox Err.Number & " " & Err.Description, vbInformation, "Find All"
Err.Clear
FindAll = False
Exit Function
End If
End Function



Et pour l'utiliser.. par exemple :

Sub Exemple_util_Findall()

Dim arTemp() As String 'variable tableau pour la fonction Findall
Dim ValCherchee as string
ValCherchee="test"
Dim Nom_Feuil as string
Nom_Feuil = "Feuil1"

'---------------------------------------------------------------
bFound = FindAll(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

If bFound = True Then
Debug.Print "Nb occurences : " & UBound(arTemp)
For X = 1 To UBound(arTemp)
debug.print arTemp(X)
Next
End If

End sub

http://jr.loucan.fr/e107_plugins/forum/forum_viewtopic.php?11
0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

12 juin 2014 à 09:51
Merci beaucoup de votre aide qui jusqu'à présent a toujours payé !

Pour ce sujet je dois créer dans l'UserForm un textbox dans lequel sera affiché tous les éléments trouvés? ou c'est une zone liste ? Ou encore plusieurs TextBox à la suite ?

J'ai commencé à faire ces lignes :

Private Sub CommandButton5_Click()

Dim recherche As Boolean
recherche = cherchC("Factures", TextBox14.Value)

If recherche = True Then
MsgBox ("Un véhicule à été trouvé !")

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


End Sub
(pour retrouver l'immatriculation)

Sub TextBox15_Findall()

Dim arTemp() As String
Dim ValCherchee As String
ValCherchee = TextBox14
Dim Nom_Feuil As String
Nom_Feuil = "Factures"

'---------------------------------------------------------------
bFound = Findall(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

If bFound = True Then
Debug.Print "Nb occurences : " & UBound(arTemp)
For x = 1 To UBound(arTemp)
Debug.Print arTemp(x)
Next
End If

End Sub
(Pour retrouver les factures correspondantes
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
12 juin 2014 à 10:41
our ce sujet je dois créer dans l'UserForm un textbox dans lequel sera affiché tous les éléments trouvés? ou c'est une zone liste ? Ou encore plusieurs TextBox à la suite ?
Je pense que tu peux faire :

Une ListBox pour afficher la référence des différentes factures
http://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-G

Puis des TextBox qui afficheront les informations de la facture sélectionnée dans ta liste.


Et donc, dans ton code.. à quel endroit tu va "alimenter" ta liste...?.. hé bien ça sera dans
Sub TextBox15_Findall()


dans la boucle for :
For x = 1 To UBound(arTemp)
   Debug.Print arTemp(x)

   ' ICI tu mets le code qui va alimenter ta liste.
 
   Next

0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

12 juin 2014 à 14:25
J'ai adapté avec la ListBox et les TextBox

Sub ListBox1_Findall()

Dim arTemp() As String
Dim ValCherchee As String
ValCherchee = TextBox14
Dim Nom_Feuil As String
Nom_Feuil = "Factures"

'---------------------------------------------------------------
bFound = Findall(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

If bFound = True Then
Debug.Print "Nb occurences : " & UBound(arTemp)
For x = 1 To UBound(arTemp)
Debug.Print arTemp(x)

ConsulterFacture.TextBox15.Value = Sheets("Factures").Cells(vcLig, 1)
ConsulterFacture.TextBox16.Value = Sheets("Factures").Cells(vcLig, 2)
ConsulterFacture.TextBox17.Value = Sheets("Factures").Cells(vcLig, 3)
ConsulterFacture.TextBox18.Value = Sheets("Factures").Cells(vcLig, 4)
ConsulterFacture.TextBox19.Value = Sheets("Factures").Cells(vcLig, 5)
ConsulterFacture.TextBox20.Value = Sheets("Factures").Cells(vcLig, 6)
ConsulterFacture.TextBox21.Value = Sheets("Factures").Cells(vcLig, 7)

Next
End If

End Sub


Mais ca ne marche pas encore.

Je veux qu'en entrant l'immatriculation + click sur "rechercher" ça donne la liste des factures correspondantes au véhicule.

Et que ensuite une fois clique sur l'une des factures ça remplisse les champs des textbox correspondants
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
12 juin 2014 à 14:44
As tu testé l'exemple que je t'avais donné ???
Si tu l'avais fait... tu aurais compris que le Numéro de ligne correspondant à ta recherche se trouve dans le tableau arrTemp(x)

Regardes dans le VBE, dans la fenêtre d'execution, ce que t'affiche la ligne de code :
Debug.Print arTemp(x)

... cette ligne de code t'affiche les N° des différentes lignes qui contiennent un résultat pour ta recherche...
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
12 juin 2014 à 15:19
De plus dans ton code... je ne vois rien concernant les ListBox...

Voila ce que tu pourrais faire par exemple :

Imaginons que je prenne comme données :


Et ma Userfor (avec ListBox + TextBox ) ressemble à ça :



Le code utilisé pour le faire est :


Private Sub bouton_FindAll_Click()

Dim arTemp() As String 'variable tableau pour la fonction Findall

Dim ValCherchee As String
ValCherchee = Me.T_immat.Value

Dim Nom_Feuil As String
Nom_Feuil = "Feuil1"

Dim ma_plage As String
    ma_plage = "A1:A1000"

'---------------------------------------------------------------
bFound = FindAll(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

'Initialisation de la ListBox
 ListBox1.ColumnCount = 3
 ListBox1.ColumnWidths = "20;40;80"

If bFound = True Then
Debug.Print "Nb occurences : " & UBound(arTemp)
For x = 1 To UBound(arTemp)
Debug.Print arTemp(x)
 '-------------------------
 'remplissage ListBox
 '-------------------------
    'première colonne
    Me.ListBox1.AddItem (arTemp(x))
    'deuxième colonne
    ListBox1.List(ListBox1.ListCount - 1, 1) = Sheets(1).Cells(arTemp(x), 1).Value
    'troisième colonne
    ListBox1.List(ListBox1.ListCount - 1, 2) = Sheets(1).Cells(arTemp(x), 2).Value

Next
End If



End Sub

Private Sub ListBox1_Click()
'Lors du click dans ma liste :
'Remplissage des TextBox :
ligneSelect = ListBox1.ListIndex
 valeur_colonne1 = ListBox1.List(ligneSelect, 0)
 valeur_Colonne2 = ListBox1.List(ligneSelect, 1)
 valeur_Colonne3 = ListBox1.List(ligneSelect, 2)

Me.T_immat_detail.Value = valeur_Colonne2
Me.T_nom_detail.Value = valeur_Colonne3

End Sub



Bien sûr... ça n'est qu'un exemple... à toi de l'adapter à tes besoins.


0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

12 juin 2014 à 15:51
Je ne dois pas avoir tout saisi dans les lignes ^^

J'ai adapté comme ca :



Private Sub CommandButton5_FindAll_Click()

Dim arTemp() As String 'variable tableau pour la fonction Findall

Dim ValCherchee As String
ValCherchee = Me.TextBox14.Value

Dim Nom_Feuil As String
Nom_Feuil = "Factures"

Dim ma_plage As String
ma_plage = "B1:B1000"

'---------------------------------------------------------------
bFound = Findall(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

'Initialisation de la ListBox
ListBox1.ColumnCount = 3
ListBox1.ColumnWidths = "20;40;80"

If bFound = True Then
Debug.Print "Nb occurences : " & UBound(arTemp)
For x = 1 To UBound(arTemp)
Debug.Print arTemp(x)
'-------------------------
'remplissage ListBox
'-------------------------
'première colonne
Me.ListBox1.AddItem (arTemp(x))
'deuxième colonne
ListBox1.List(ListBox1.ListCount - 1, 1) = Sheets(1).Cells(arTemp(x), 1).Value
'troisième colonne
ListBox1.List(ListBox1.ListCount - 1, 2) = Sheets(1).Cells(arTemp(x), 2).Value
ListBox1.List(ListBox1.ListCount - 1, 3) = Sheets(1).Cells(arTemp(x), 3).Value
ListBox1.List(ListBox1.ListCount - 1, 4) = Sheets(1).Cells(arTemp(x), 4).Value
ListBox1.List(ListBox1.ListCount - 1, 5) = Sheets(1).Cells(arTemp(x), 5).Value
ListBox1.List(ListBox1.ListCount - 1, 6) = Sheets(1).Cells(arTemp(x), 6).Value
ListBox1.List(ListBox1.ListCount - 1, 7) = Sheets(1).Cells(arTemp(x), 7).Value
Next
End If



End Sub

Private Sub ListBox1_Click()
'Lors tu click dans ma liste :
'Remplissage des TextBox :
ligneSelect = ListBox1.ListIndex
valeur_colonne1 = ListBox1.List(ligneSelect, 0)
valeur_Colonne2 = ListBox1.List(ligneSelect, 1)
valeur_Colonne3 = ListBox1.List(ligneSelect, 2)
valeur_Colonne4 = ListBox1.List(ligneSelect, 3)
valeur_Colonne5 = ListBox1.List(ligneSelect, 4)
valeur_Colonne6 = ListBox1.List(ligneSelect, 5)
valeur_Colonne7 = ListBox1.List(ligneSelect, 6)

Me.T_immat_detail.Value = valeur_Colonne2
Me.T_nom_detail.Value = valeur_Colonne3

End Sub



La valeur recherchée est bien "Me.TextBox14.value" ?
De plus, les immatriculations dans la feuille excel sont en colonne B j'ai donc remplacé

Je ne comprend pas la partie arTemp(x) ?
Idem pour "ColumnCount et ColumnWidths"


Merci de votre aide
0
galaxy2009
Messages postés
144
Date d'inscription
dimanche 24 avril 2011
Statut
Membre
Dernière intervention
16 juin 2016

12 juin 2014 à 15:59
bonjour,

tu es sur un prog VBS ou sur excel ?
0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

12 juin 2014 à 16:03
Excel ! :-)
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
12 juin 2014 à 16:06
Galaxy : Elle travaille en VBA (excel).


Sandra :

' Nombre de colonne de la listBox
 ListBox1.ColumnCount = 3

'Largeur des colonnes dans la listbox
 ListBox1.ColumnWidths = "20;40;80"


Toi... au total tu as 7 colonnes (autant que de colonnes à traiter dans ton fichier excel)
+1 si, comme moi.. tu veux ajouter le N° de ligne où se trouve l'information.

=> Soit...8 Colonnes au total !


Je ne comprend pas la partie arTemp(x) ?

arTemp est une variable "tableau" .. un ARRAY.

Ce tableau contient la liste de tous les numéros de lignes où le programme a trouvé une immatriculation identique à ta recherche !

0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

12 juin 2014 à 16:10
D'accord ça j'ai compris maintenant.

Pour
Me.T_immat_detail.Value = valeur_Colonne2
Me.T_nom_detail.Value = valeur_Colonne3

Cela correspond à quoi ?
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
12 juin 2014 à 16:16
J'ai nommé mes textbox (celles qui sont en bas dans mon exemple).
Donc toi...
c'est tes textbox 1 à 7

Me.Textbox1.Value = valeur_Colonne2
Me.Textbox2.Value = valeur_Colonne3
Me.Textbox3.Value = valeur_Colonne3
Me.Textbox4.Value = valeur_Colonne4
' ...etc...

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

12 juin 2014 à 16:20
Private Sub CommandButton5_FindAll_Click()

Dim arTemp() As String 'variable tableau pour la fonction Findall

Dim ValCherchee As String
ValCherchee = Me.TextBox14.Value

Dim Nom_Feuil As String
Nom_Feuil = "Factures"

Dim ma_plage As String
ma_plage = "B1:B1000"

'---------------------------------------------------------------
bFound = Findall(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

'Initialisation de la ListBox
ListBox1.ColumnCount = 8
ListBox1.ColumnWidths = "20;40;80"

If bFound = True Then
Debug.Print "Nb occurences : " & UBound(arTemp)
For x = 1 To UBound(arTemp)
Debug.Print arTemp(x)
'-------------------------
'remplissage ListBox
'-------------------------
'première colonne
Me.ListBox1.AddItem (arTemp(x))
'deuxième colonne
ListBox1.List(ListBox1.ListCount - 1, 1) = Sheets(1).Cells(arTemp(x), 1).Value
'troisième colonne
ListBox1.List(ListBox1.ListCount - 1, 2) = Sheets(1).Cells(arTemp(x), 2).Value
ListBox1.List(ListBox1.ListCount - 1, 3) = Sheets(1).Cells(arTemp(x), 3).Value
ListBox1.List(ListBox1.ListCount - 1, 4) = Sheets(1).Cells(arTemp(x), 4).Value
ListBox1.List(ListBox1.ListCount - 1, 5) = Sheets(1).Cells(arTemp(x), 5).Value
ListBox1.List(ListBox1.ListCount - 1, 6) = Sheets(1).Cells(arTemp(x), 6).Value
ListBox1.List(ListBox1.ListCount - 1, 7) = Sheets(1).Cells(arTemp(x), 7).Value
Next
End If



End Sub

Private Sub ListBox1_Click()
'Lors tu click dans ma liste :
'Remplissage des TextBox :
ligneSelect = ListBox1.ListIndex
valeur_colonne1 = ListBox1.List(ligneSelect, 0)
valeur_Colonne2 = ListBox1.List(ligneSelect, 1)
valeur_Colonne3 = ListBox1.List(ligneSelect, 2)
valeur_Colonne4 = ListBox1.List(ligneSelect, 3)
valeur_Colonne5 = ListBox1.List(ligneSelect, 4)
valeur_Colonne6 = ListBox1.List(ligneSelect, 5)
valeur_Colonne7 = ListBox1.List(ligneSelect, 6)

Me.TextBox15.Value = valeur_Colonne2
Me.TextBox16.Value = valeur_Colonne3
Me.TextBox17.Value = valeur_Colonne4
Me.TextBox18.Value = valeur_Colonne5
Me.TextBox19.Value = valeur_Colonne6
Me.TextBox20.Value = valeur_Colonne7
Me.TextBox21.Value = valeur_Colonne8



End Sub


Voila ce que j'ai écris.
Lorsque que je clique sur mon bouton rechercher (CommandButton5) rien ne se passe..
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
12 juin 2014 à 16:41
ListBox1.ColumnWidths = "20;40;80"

Tu as 8 colonnes... il te faut donc définir 8 largeur....

Lorsque que je clique sur mon bouton rechercher (CommandButton5) rien ne se passe.
Mets un POINT d'ARRET sur la ligne :
bFound = Findall(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())

Puis execute le programme en mode PAS à PAS...
et regardes la valeur de tes différentes variables.....
0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

12 juin 2014 à 16:49
Je ne comprends pas .. ^^

A quoi correspondent les largeurs?
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
12 juin 2014 à 17:19
Dans la listbox..... tu as des colonnes....
Ces colonnes.. tu peux leur donner des dimensions ( la largeur).
Donc.. pour chaque colonne de ta listbox il faut que tu mette une colonne "adaptée"' aux informations qu'elles vont contenir).
Par exemple... pour une immatriculation ( d'une dizaine de caractères au max.) tu ne vas mettre une largeur de 300 ... tu n'as qu'a modifier la largeur de chacune des colonnes via le code
ListBox1.ColumnWidths = "20;40;80;40;40;40;40;40"
0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

13 juin 2014 à 09:52
J'ai compris pour les dimensions des colonnes ! :-)

Maintenant pour la recherche d'immatriculation lorsque je clique sur "rechercher" rien ne se passe encore une fois. Je ne vois pas d'ou vient l'erreur car quand je clique dessus aucun message n'apparaît..

Private Sub CommandButton5_FindAll_Click()

Dim arTemp() As String 'variable tableau pour la fonction Findall

Dim ValCherchee As String
ValCherchee = ConsulterFacture.TextBox14.Value

Dim Nom_Feuil As String
Nom_Feuil = "Factures"

Dim ma_plage As String
ma_plage = "B1:B1000"

'---------------------------------------------------------------
bFound = Findall(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

'Initialisation de la ListBox
ListBox1.ColumnCount = 8
ListBox1.ColumnWidths = "20;20;10;100;20;10;100"

If bFound = True Then
Debug.Print "Nb occurences : " & UBound(arTemp)
For x = 1 To UBound(arTemp)
Debug.Print arTemp(x)
'-------------------------
'remplissage ListBox
'-------------------------
'première colonne
ConsulterFacture.ListBox1.AddItem (arTemp(x))
'deuxième colonne
ListBox1.List(ListBox1.ListCount - 1, 1) = Sheets("Factures").Cells(arTemp(x), 1).Value
'troisième colonne
ListBox1.List(ListBox1.ListCount - 1, 2) = Sheets("Factures").Cells(arTemp(x), 2).Value
ListBox1.List(ListBox1.ListCount - 1, 3) = Sheets("Factures").Cells(arTemp(x), 3).Value
ListBox1.List(ListBox1.ListCount - 1, 4) = Sheets("Factures").Cells(arTemp(x), 4).Value
ListBox1.List(ListBox1.ListCount - 1, 5) = Sheets("Factures").Cells(arTemp(x), 5).Value
ListBox1.List(ListBox1.ListCount - 1, 6) = Sheets("Factures").Cells(arTemp(x), 6).Value
ListBox1.List(ListBox1.ListCount - 1, 7) = Sheets("Factures").Cells(arTemp(x), 7).Value
Next
End If



End Sub



Ensuite j'ai adapté le remplissage de mes textbox de cette manière (lorsque la premiere partie fonctionnera biensure) :

Private Sub ListBox1_Click()
'Lors tu click dans ma liste :
'Remplissage des TextBox :
ligneSelect = ListBox1.ListIndex
valeur_colonne1 = ListBox1.List(ligneSelect, 0)
valeur_Colonne2 = ListBox1.List(ligneSelect, 1)
valeur_Colonne3 = ListBox1.List(ligneSelect, 2)
valeur_Colonne4 = ListBox1.List(ligneSelect, 3)
valeur_Colonne5 = ListBox1.List(ligneSelect, 4)
valeur_Colonne6 = ListBox1.List(ligneSelect, 5)
valeur_Colonne7 = ListBox1.List(ligneSelect, 6)

ConsulterFacture.TextBox15.Value = valeur_Colonne2
ConsulterFacture.TextBox16.Value = valeur_Colonne3
ConsulterFacture.TextBox17.Value = valeur_Colonne4
ConsulterFacture.TextBox18.Value = valeur_Colonne5
ConsulterFacture.TextBox19.Value = valeur_Colonne6
ConsulterFacture.TextBox20.Value = valeur_Colonne7
ConsulterFacture.TextBox21.Value = valeur_Colonne8



End Sub
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
13 juin 2014 à 09:59
orsque je clique sur "rechercher" rien ne se passe encore une fois.
As tu mis un POINT D'ARRET dans ton code... puis tester en MODE PAS A PAS ?????

Si tu ne fais pas ça... nous ne pourront pas savoir ce qui ne fonctionne pas !!

Regarde ça : http://www.commentcamarche.net/contents/1381-debogage
Puis revients nous voir après avoir essayé de debugué ton code.
0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

13 juin 2014 à 10:06
Erreur de compilation: Sub ou Function non définie

bFound = Findall(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())

C'est "Findall" qui est surligné
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
13 juin 2014 à 10:13
qui est souligné ?
Et il te mets un message d'erreur ?.
Tu as essayé de faire F8 ( le mode pas à pas) pour voir si il contienuait ??
Et si ça contienu... quelles sont les valeurs de tes variables ?
0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

13 juin 2014 à 10:18
J'ai essayé la compilation dans "débogage" et c'est là qu'est apparu le message d'erreur "Erreur de compilation: Sub ou Function non définie"

Lors de l'apparition du message "Findall" est apparu surligné dans la ligne

bFound = Findall(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
13 juin 2014 à 10:32
ok... et tu as bien mis dans un MODULE la fonction FIndALL ??
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
13 juin 2014 à 11:46
Pour info...


Point d'arrêt :


On passe la souris sur une variable pour voir sa valeur :

et si on passe à l'instruction suivante :



On peut aussi utiliser l'instruction Debug.print
=> L'info apparaitra dans la fenêtre d'exécution..

0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

13 juin 2014 à 11:58
Problème sur mon fichier :

Les lignes ne sont pas surlignées en jaune fluo .. et cela même sur les UserForm qui marchent deja ..

Est-ce lié ?
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
13 juin 2014 à 12:00
Comme je te l'ai dit... tu n'entres pas dans le code de ton bouton....
=> Tu as bien mis un point d'arrêt dedans ?
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
13 juin 2014 à 11:48
J'ai vérifié le bon bouton est bien CommandButton5 ..

Tu peux, dans ta USERFORM, double cliquer sur le bouton en question ?
Arrives tu bien sur le code que tu nous montres ???
0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

13 juin 2014 à 12:01
Ah non !!!!

J'arrive sur une ligne de code commençant par
Private Sub CommandButton5_Click()


Tandis que les lignes de codes que nous avons effectuées ensemble commencent par :
Private Sub CommandButton5_FindAll_Click()
0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

13 juin 2014 à 12:04

Private Sub CommandButton5_Click()

'variable tableau pour la fonction Findall
Dim arTemp() As String

Dim ValCherchee As String
ValCherchee = ConsulterFacture.TextBox14.Value

Dim Nom_Feuil As String
Nom_Feuil = "Factures"

Dim ma_plage As String
ma_plage = "B1:B1000"

'---------------------------------------------------------------
bFound = FindAll(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

'Initialisation de la ListBox
ListBox1.ColumnCount = 8
ListBox1.ColumnWidths = "20;20;10;100;20;10;100"

If bFound = True Then
Debug.Print "Nb occurences : " & UBound(arTemp)
For x = 1 To UBound(arTemp)
Debug.Print arTemp(x)
'-------------------------
'remplissage ListBox
'-------------------------
'première colonne
ConsulterFacture.ListBox1.AddItem (arTemp(x))
'deuxième colonne
ListBox1.List(ListBox1.ListCount - 1, 1) = Sheets("Factures").Cells(arTemp(x), 1).Value
'troisième colonne
ListBox1.List(ListBox1.ListCount - 1, 2) = Sheets("Factures").Cells(arTemp(x), 2).Value
ListBox1.List(ListBox1.ListCount - 1, 3) = Sheets("Factures").Cells(arTemp(x), 3).Value
ListBox1.List(ListBox1.ListCount - 1, 4) = Sheets("Factures").Cells(arTemp(x), 4).Value
ListBox1.List(ListBox1.ListCount - 1, 5) = Sheets("Factures").Cells(arTemp(x), 5).Value
ListBox1.List(ListBox1.ListCount - 1, 6) = Sheets("Factures").Cells(arTemp(x), 6).Value
ListBox1.List(ListBox1.ListCount - 1, 7) = Sheets("Factures").Cells(arTemp(x), 7).Value
Next
End If

End Sub



Private Sub ListBox1_Click()
'Lors tu click dans ma liste :
'Remplissage des TextBox :
ligneSelect = ListBox1.ListIndex
valeur_colonne1 = ListBox1.List(ligneSelect, 0)
valeur_Colonne2 = ListBox1.List(ligneSelect, 1)
valeur_Colonne3 = ListBox1.List(ligneSelect, 2)
valeur_Colonne4 = ListBox1.List(ligneSelect, 3)
valeur_Colonne5 = ListBox1.List(ligneSelect, 4)
valeur_Colonne6 = ListBox1.List(ligneSelect, 5)
valeur_Colonne7 = ListBox1.List(ligneSelect, 6)

ConsulterFacture.TextBox15.Value = valeur_Colonne2
ConsulterFacture.TextBox16.Value = valeur_Colonne3
ConsulterFacture.TextBox17.Value = valeur_Colonne4
ConsulterFacture.TextBox18.Value = valeur_Colonne5
ConsulterFacture.TextBox19.Value = valeur_Colonne6
ConsulterFacture.TextBox20.Value = valeur_Colonne7
ConsulterFacture.TextBox21.Value = valeur_Colonne8



End Sub






CA MARCHE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Merci beaucoup !!!!
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
13 juin 2014 à 12:08
enfin...

Pense à cloturer le sujet.
0
SandraMt
Messages postés
58
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
2 juillet 2014

Modifié par SandraMt le 17/06/2014 à 12:23
J'ai une question ! Je fais des "pense bête" sous chaque ligne pour pouvoir les réutiliser dans d'autres situations.

Mais je ne me rappel plus la signification des lignes suivantes :

ConsulterFacture.ListBox1.AddItem (arTemp(x))
'deuxième colonne
ListBox1.List(ListBox1.ListCount - 1, 1) = Sheets("Factures").Cells(arTemp(x), 1).Value
'troisième colonne
ListBox1.List(ListBox1.ListCount - 1, 2) = Sheets("Factures").Cells(arTemp(x), 2).Value
ListBox1.List(ListBox1.ListCount - 1, 3) = Sheets("Factures").Cells(arTemp(x), 3).Value
ListBox1.List(ListBox1.ListCount - 1, 4) = Sheets("Factures").Cells(arTemp(x), 4).Value
ListBox1.List(ListBox1.ListCount - 1, 5) = Sheets("Factures").Cells(arTemp(x), 5).Value
ListBox1.List(ListBox1.ListCount - 1, 6) = Sheets("Factures").Cells(arTemp(x), 6).Value
ListBox1.List(ListBox1.ListCount - 1, 7) = Sheets("Factures").Cells(arTemp(x), 7).Value


Que signifie ici "AddItem et arTemp(x) ?
Et enfin, les indices négatifs = False ?
0
jordane45
Messages postés
35765
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 juin 2022
358
17 juin 2014 à 12:54
ah la la ...
Il faut que tu te mettes à google .... ^^

AddItem ... (en anglais : Add ITEM => Ajouter élément)

De toutes façons.. regarde ce (bon ) tuto sur l'utilisation des éléments d'un Userform :
http://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-G

arTemp(x) : C'est un Array ...
http://silkyroad.developpez.com/vba/tableaux/


Et enfin, les indices négatifs = False ?
Là.. je ne sais pas de quoi tu me parles..... Où ça des indices négatifs.... et = False ??
0