Conversion langage excel 4 en VBA
GVT
-
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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
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:
- Conversion langage excel 4 en VBA
- Liste déroulante excel - Guide
- Mise en forme conditionnelle excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
2 réponses
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.
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.
Bonjour,
Si tu veux que cela s'affiche (numero de ligne) dans une ListBox, voici le code:
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
https://www.cjoint.com/c/HCDhAUN2nEb