Conversion langage excel 4 en VBA

GVT -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
Bonjour à tous,

Je possède un fichier codé avec des macros en Excel 4. Mon entreprise vient de migrer tout notre parc informatique sur des version plus récentes et mon fichier ne fonctionne plus. J'aimerai donc le recoder en VBA mais j'ai des connaissances limitées dans ce domaine.

Voilà comment fonctionne le fichier de base :
il possède une grosse base de données d'éléments chimiques. On pouvait faire une recherche d'un corps en particulier et il nous sortait toutes les propriétés chimiques. Le code Excel 4 a l'air simple de base mais je me perds un peu avec le codage en VBA.

En fouillant sur le site j'ai trouvé des choses pas mal et voilà ce que j'ai fait pour le moment :

Private Sub CommandButton1_Click()

Dim Texte As String
Dim Plage As Range
Dim Lignes(), i As Long
Dim Flag As Boolean

Texte = InputBox("Tapez le corps recherché", "Recherche d'un corps")

Set Plage = Sheets("BDD").Range("A1:A1390")

Flag = Find_Next(Plage, Texte, Lignes())
If Flag Then
For i = LBound(Lignes) To UBound(Lignes)
Debug.Print Lignes(i)

Next i
Else
MsgBox "Le corps " & Texte & " n'a pas été trouvée dans la base de données"
End If

End Sub

Function Find_Next(Rng As Range, Texte As String, Tbl()) As Boolean
Dim Nbre As Integer, Lig As Long, Cptr As Long

Nbre = Application.CountIf(Rng, Texte)
If Nbre > 0 Then
ReDim Tbl(Nbre - 1)
Lig = 1
For Cptr = 0 To Nbre - 1
Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
Tbl(Cptr) = Lig
Next
Else
GoTo Absent
End If
Find_Next = True
Exit Function
Absent:
Find_Next = False
End Function


La difficulté que je rencontre est le fait de créer la liste de ce que le programme a trouvé. J'aimerai en effet qu'en tapant seulement une partie du corps, il me sorte tous les corps contenant le mot de ma recherche afin de sélectionner celui qu'il me faut réellement. J'ai essayé la fonction listbox1.additem mais je pense que je ne l'ai pas mis au bon endroit et peut être qu'il me manque un variable.

J'espère avoir été clair

Merci pour vos réponses

Gaëlle
A voir également:

2 réponses

gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 727
 
Bonjour,

Si tu pouvais nous mettre un exemple de structure des données, sans éléments personnels, avec les macros excel4, ce serait plus facile de t'aider.
Pour communiquer ton classeur tu le télécharges sur https://www.cjoint.com/ (mode d'emploi) et tu mets ici le lien obtenu.
0
GVT
 
Voici le lien pour le fichier d'origine. Je me suis pas encore attaqué à la partie e récolte de données. Je suis encore à la phase de la recherche pour le nouveau fichier en VBA

https://www.cjoint.com/c/HCDhAUN2nEb
0
cs_Le Pivert Messages postés 8437 Statut Contributeur 729
 
Bonjour,

Si tu veux que cela s'affiche (numero de ligne) dans une ListBox, voici le code:

Option Explicit
Private Sub CommandButton1_Click()
Dim Texte As String
Dim Plage As Range
Dim Lignes(), i As Long
Dim Flag As Boolean
ListBox1.Clear
Texte = InputBox("Tapez le corps recherché", "Recherche d'un corps")

Set Plage = Range("A1:A1390")

Flag = Find_Next(Plage, Texte, Lignes())
If Flag Then
For i = LBound(Lignes) To UBound(Lignes)
Debug.Print Lignes(i)
ListBox1.AddItem (Lignes(i))
Next i
Else
MsgBox "Le corps " & Texte & " n'a pas été trouvée dans la base de données"
End If

End Sub

Function Find_Next(Rng As Range, Texte As String, Tbl()) As Boolean
Dim Nbre As Integer, Lig As Long, Cptr As Long

Nbre = Application.CountIf(Rng, Texte)
If Nbre > 0 Then
ReDim Tbl(Nbre - 1)
Lig = 1
For Cptr = 0 To Nbre - 1
Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
Tbl(Cptr) = Lig
Next
Else
GoTo Absent
End If
Find_Next = True
Exit Function
Absent:
Find_Next = False
End Function


0
GVT
 
C'est bien ce que j'avais essayé au début mais il me dit que la variable "Listbox1" n'est pas définie. En réalité je n'ai pas besooin du numéro de ligne mais bien qu'il m'affiche tous les corps contenant ma recherche.
0
cs_Le Pivert Messages postés 8437 Statut Contributeur 729
 
Voilà un exemple avec les explications:

https://www.cjoint.com/c/HCEjeAKIBnQ

@+ Le Pivert
0