Si vous le voulez bien, rentrons directement dans le vif du sujet.
J'ai plusieurs feuilles de tableaux dans un fichier excel.
Ces tableaux référencent des statistiques fournisseurs. Du genre: JeanMichel a livré 3455 lignes de commandes avec un moyenne de de 6 jours de retard etc etc
J'ai créé un useform parce que je veux pouvoir rechercher un fournisseur parmi tout ce sac de noeuds (j'ai plus de 200 entrées) et q'une jolie page s'affiche pour me synthétiser les informations.
J'ai donc mit une superbe textbox dans laquelle j'inscrit le nom du routier ou le numéro de compte du fournisseur puis je clique sur un joli bouton commandbutton, la recherche se lance selon le critère de la textebox et un listing des résultats de la recherche s'affiche dans un highfrontkick combobox.
Et là bam! crochet à la machoire Erreur d'exécution '1004' La méthode active de la classe range a échoué. J'en tombe KO.
Vous l'aurez compris pour l'instant j'en suis juste à l'écriture d'une liste à l'intérieur d'une combobox
Voici mon code. Attention ça pique les yeux.
---------------------------------
'affiche le bouton de lancement de recherche quand on écrit dans la textbox
Private Sub TextBox1_Change()
ok1.Visible = True
End Sub
'Surligne le texte de la textbox au lancement du fichier. Si vous avez mieux que enter() pour que la textbox soit le premier élément actif je sui preneur
Private Sub TextBox1_enter()
'On vérifie la présence d'un doublon
If ActiveCell.Row <> ro And ActiveCell.Column <> col Then
ComboBox1.AddItem ActiveCell.Value
End If
' Si le flag est faux, la fonction recherche a exécuté une boucle
If ActiveCell.Row = ro And ActiveCell.Column = col Then
flag = False
End If
Loop
compt = compt + 1
feuil = "Délais AR & livraison"
Loop
End Sub
----------------------------
Mon problème est que les deux commandes en gras ne fonctionnent pas. Apparemment la recherche est juste mais je ne peux pas affecter de .activate ou de .select.
Clairement j'aimerai créer une liste combobox à partir de recherches par mots clefs. Chaque item de la liste me renvoyant aux coordonnées de la cellule contenant le mot clef recherché. Ca ne doit pas être bien compliqué mais personnelement je galère -_-
ro = 1
col = 1
compt = 0
ok1.Visible = False
dim resultat as object
Do
set resultat = Sheets(feuil).Cells.Find(what:=TextBox1, After:=Sheets(feuil).Cells(ro,col), _
LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= False)
if resultat is nothing then exit do
'On vérifie la fin de la boucle
If resultat.Row < ro Then exit do
If resultat.Row = ro And resultat.Column <= col Then exit do
ComboBox1.AddItem resultat.Value
ro = resultat.Row
col = resultat.Column
Loop
pour ceux que ça pourrait aider (si vous avez envie de faire un truc similaire) voila mon code ... et une image pour y voir plus clair. http://img338.imageshack.us/img338/5325/prtscxt4.png
Dim compte As String
Dim fournisseur As String
Dim commandes As Integer
Dim ardmd As Integer
Dim ecart As Integer
Dim respect As String
Dim livar As Integer
Dim retard As Integer
Dim livr As String
Dim Tex As String
Dim Texx As String
Dim indice As Integer
Dim facture As Integer
Set fourn2 = Sheets("Délais AR & livraison").Cells.Find(what:=ComboBox1, After:=Sheets("Délais AR & livraison").Cells(1, 1), _
LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If fourn1.Column = 2 Then
c = 0
Else
c = 1
End If
compte = fourn1.Offset(0, c - 1)
commandes = fourn1.Offset(0, c + 1)
fournisseur = fourn1.Offset(0, c)
ardmd = fourn1.Offset(0, c + 2).Value * 100
ecart = fourn1.Offset(0, c + 3)
respect = fourn1.Offset(0, c + 4)
livar = fourn2.Offset(0, c + 2).Value * 100
retard = fourn2.Offset(0, c + 3)
livr = fourn2.Offset(0, c + 4)
indice = fourn2.Offset(0, c + 5)
facture = fourn2.Offset(0, c + 6).Value * 100
Tex = fournisseur & " a traité " & commandes & " lignes de commandes." & Chr(10) & Chr(10) & " Pour ces commandes, " & ardmd & "% des délais accusés en réception par le fournisseur sont égaux aux délais demandés par Solem. " & Chr(10) & " ( En moyenne, le fournisseur accuse " & ecart & " jour(s) d'écart) " & Chr(10) & " " & livar & "% des livraisons respectent les délais accusés par le fournisseur. " & Chr(10) & " ( Une moyenne de " & retard & " jour(s) de retard a été observé.) " & Chr(10) & " " & fournisseur & " respecte " & respect & " les délais demandés par Solem, à un jour près. " & Chr(10) & " Ce fournisseur livre " & livr & " dans les temps, à trois jours près." & Chr(10) & "" & Chr(10) & ""
Texx = " L'indice de ponctualité de " & fournisseur & " est de " & indice & "." & Chr(10) & " Plus cet indice est faible, plus le retard du fournisseur est préjudiciable pour la chaîne de production." & Chr(10) & " [min 0 ; max 100] " & Chr(10) & Chr(10) & " Ce fournisseur livre, et par conséquent facture, " & facture & "% de ses livraisons le mois précédent." & Chr(10) & "" & Chr(10) & "" & Chr(10) & "" & Chr(10) & " Voulez-vous effectuer une nouvelle recherche?"
Private Sub ok1_Click()
Dim ro As Long
Dim col As Long
Dim flag As Boolean
Dim feuil As String
Dim compt As Integer
Dim n As Integer
Dim resultat As Object