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

2 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
    1. 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
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. 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
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Voilà un exemple avec les explications:

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

      @+ Le Pivert
      0