Conversion langage excel 4 en VBA

Fermé
GVT - 28 mars 2018 à 16:56
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 30 mars 2018 à 11:05
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 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 705
28 mars 2018 à 17:50
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
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 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
28 mars 2018 à 18:55
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
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 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
30 mars 2018 à 11:05
Voilà un exemple avec les explications:

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

@+ Le Pivert
0