Demande de soutien en vba Excel

Fermé
STEPH - 26 sept. 2021 à 16:20
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 - 27 sept. 2021 à 14:59
Bonjour à tous,

Je suis débutant en vba . Il m'a été demandé de faire une macro qui va permettre à l'utilisateur de saisir un terme, ensuite ce terme est rechercher dans plusieurs fichiers .xlsx contenus dans un dossier. si le terme est trouvé, la ligne est copiée dans une feuille Excel autant de fois que le terme est trouvé. Vraiment j'ai besoin de l'aide
A voir également:

3 réponses

Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
26 sept. 2021 à 17:57
Bonjour,
Eh bien qu'avez-vous déjà essayé de réaliser?
0
Voici ce que j'ai fait:
'Le premier bouton

Private Sub dossier_Click()
Dim bDialogue As Office.FileDialog
Dim chDossier As String

'Choix du chemin

Set bDialogue = Application.FileDialog(msoFileDialogFolderPicker)
   
bDialogue.Title = "Sélectionner un dossier à parcourir"

'Vérification pour voir si le chemin a été choisi

If bDialogue.Show = -1 Then
chDossier = bDialogue.SelectedItems(1)
Range("B5").Value = chDossier

End If
End Sub

'Le deuxième bouton

Private Sub recherche_Click()

If (Range("B5").Value = "") Then

MsgBox ("Vous devez désigner un dossier à parcourir avec le premier bouton")

Exit Sub
End If

If (Range("B8").Value = "") Then
MsgBox ("Vous devez spécifier un terme à remplacer")

Exit Sub
End If
'La procedure de nettoyage la plage qui va recevoir la copie

nettoyer
'Procedure de traitement des fichiers

parcourirLesFichiers

End Sub

Sub nettoyer()

'Une procedure qui permet de vider les cellules à partir de la ligne 11,colonne 2 à 6


Dim ligne As Integer: Dim colonne As Integer
ligne = 11

While (Cells(ligne, 2).Value <> "")

For colonne = 2 To 6
Cells(ligne, colonne).Value = ""
Next colonne
ligne = ligne + 1

Wend

End Sub

Sub parcourirLesFichiers()

'Une procedure qui permet de charger le chemin du dossier contenant les fichiers et mot à rechercher saisi par l'utilisateur

Dim nom_dossier As String: Dim fichier As Object
Dim le_dossier, chaque_fichier: Dim flux_lecture
Dim ligne As Integer: Dim le_fichier As String
Dim contenu As String: Dim chercher As String: Dim remplacer As String

nom_dossier = Range("B5").Value
chercher = Range("B8").Value

ligne = 11

Set fichier = CreateObject("scripting.filesystemobject")
Set le_dossier = fichier.getfolder(nom_dossier)
Set flux_lecture = CreateObject("ADODB.Stream")
For Each chaque_fichier In le_dossier.Files

le_fichier = nom_dossier & "\" & chaque_fichier.Name
contenu = ""

'Ouvrir le fichier charger en mémoire

flux_lecture.Open
flux_lecture.LoadFromFile (le_fichier)
contenu = flux_lecture.ReadText()
flux_lecture.Close

'La copie du mot chercher dans la feuille du formulaireImport à partir de la ligne 11,colonne 2

contenu.Sheets("Feuil1,chercher").Cells.Copyc formulaireImport.Sheets("Import").Range("ligne,2")
flux_lecture.Open
flux_lecture.WriteText contenu
flux_lecture.SaveToFile le_fichier, 2
flux_lecture.Close

Next chaque_fichier

'vider les variables de leurs contenus

Set flux_lecture = Nothing
Set le_dossier = Nothing
Set fichier = Nothing

End Sub
0
Le Pingou Messages postés 12155 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 29 septembre 2024 1 448
27 sept. 2021 à 14:59
Bonjour,
Merci pour l'information.
Je constate que vous utilisez le CreateObject("ADODB.Stream") que je ne métrise pas.
Désolé de ne pas pouvoir en faire plus.
0