recherche d'une donnee dans fichiers fermes redemande merci

VBANOVICE

XLDnaute Junior
bonjour
n'ayant pas eu de réponses a ma derniere demande, je me permet de la reformuler avec un fichier exemple

il y a autant de fichiers que de clients
j'aimerais a l'aide d'une macro pouvoir faire une recherche a l'aide d'une inputbox sur la colone F d'une valeur (par exemple voiture), dans les fichiers fermés
le resultat peut etre dans une combobox ou msgbox avec la valeur demandée ansi que la valeur de la cellule C3 ( code client).
peut etre qu'avec l'exemple cela sera plus clair

merci de votre aide

@+
 

Pièces jointes

  • Classeur2.xls
    15.5 KB · Affichages: 65
  • Classeur2.xls
    15.5 KB · Affichages: 74
  • Classeur2.xls
    15.5 KB · Affichages: 73

PMO2

XLDnaute Accro
Re : recherche d'une donnee dans fichiers fermes redemande merci

Bonjour,

Une piste avec le code suivant à copier dans un module standard
Code:
Sub RechercheDansClasseurs()
Dim FS As FileSearch
Dim WB As Workbook
Dim S As Worksheet
Dim R As Range
Dim Recherche
Dim var
Dim i&
Dim k&
Dim cpt&
Dim A$
Dim T()
Recherche = Application.InputBox( _
  prompt:="Tapez le mot recherché.", _
  Title:="Recherche dans les classeurs des clients", _
  Type:=2)
If Recherche = False Then Exit Sub
Set FS = Application.FileSearch
FS.NewSearch
FS.LookIn = ThisWorkbook.Path
FS.FileType = msoFileTypeExcelWorkbooks
If FS.Execute() = 0 Then Exit Sub
'--- Si classeur déjà ouvert, on sort ---
On Error Resume Next
For i& = 1 To FS.FoundFiles.Count
  If FS.FoundFiles(i&) <> ThisWorkbook.FullName Then
    Err.Clear
    A$ = Mid(FS.FoundFiles(i&), InStrRev(FS.FoundFiles(i&), "\") + 1)
    Set WB = Workbooks(A$)
    If Err = 0 Then
      MsgBox "Le classeur ''" & A$ & "'' est ouvert. Veuillez le fermer."
      Exit Sub
    End If
  End If
Next i&
On Error GoTo 0
'--- Recherche dans les classeurs ---
Application.ScreenUpdating = False
For i& = 1 To FS.FoundFiles.Count
  If FS.FoundFiles(i&) <> ThisWorkbook.FullName Then
    Set WB = GetObject(FS.FoundFiles(i&))
    Set S = WB.Sheets(1)
    Set R = S.Range(S.Cells(1, 1), S.Cells(S.[f65536].End(xlUp).Row, 7))
    var = R
    For k& = 1 To UBound(var, 1)
      If Trim(LCase(var(k&, 6))) = Trim(LCase(Recherche)) Then
        cpt& = cpt& + 1
        ReDim Preserve T(1 To 3, 1 To cpt&)
        T(1, cpt&) = WB.Name
        T(2, cpt&) = var(3, 3)
        T(3, cpt&) = Recherche
      End If
    Next k&
    WB.Close False
    Set WB = Nothing
  End If
Next i&
Set FS = Nothing
If cpt& = 0 Then
  MsgBox "Aucune occurence du mot ''" & Recherche & "'' n'a été trouvé."
  Application.ScreenUpdating = True
  Exit Sub
End If
'--- Inscription du résultat dans une nouvelle feuille ---
Set WB = ThisWorkbook
Set S = WB.Sheets.Add(after:=WB.Sheets(WB.Sheets.Count))
Set R = S.Range(S.Cells(2, 1), S.Cells(UBound(T, 2) + 1, UBound(T, 1)))
R = Application.Transpose(T)
Set R = S.Range("a1:c1")
R = Array("CLASSEUR", "CLIENT", "MOT RECHERCHE")
R.Font.Bold = True
R.HorizontalAlignment = xlCenter
R.Interior.ColorIndex = 35
S.Cells.Columns.AutoFit
Application.ScreenUpdating = True
End Sub
RESTRICTION
Les classeurs clients doivent être dans le même dossier que le classeur contenant cette macro
et AUCUN autre classeur n'étant pas un classeur clients ne doit s'y trouver.

FONCTIONNEMENT
1) téléchargez l'exemple en pièce jointe pour plus de facilité
2) ouvrez le classeur "Programme" et lancez la macro "RechercheDansClasseurs"
3) renseignez l'InputBox du mot recherché
4) le programme ouvre tous les classeurs et y cherche le mot sélectionné puis affiche le résultat dans une nouvelle feuille

Cordialement.

PMO
Patrick Morange
 

VBANOVICE

XLDnaute Junior
Re : recherche d'une donnee dans fichiers fermes redemande merci

Bonjour,

Une piste avec le code suivant à copier dans un module standard
Code:
Sub RechercheDansClasseurs()
Dim FS As FileSearch
Dim WB As Workbook
Dim S As Worksheet
Dim R As Range
Dim Recherche
Dim var
Dim i&
Dim k&
Dim cpt&
Dim A$
Dim T()
Recherche = Application.InputBox( _
  prompt:="Tapez le mot recherché.", _
  Title:="Recherche dans les classeurs des clients", _
  Type:=2)
If Recherche = False Then Exit Sub
Set FS = Application.FileSearch
FS.NewSearch
FS.LookIn = ThisWorkbook.Path
FS.FileType = msoFileTypeExcelWorkbooks
If FS.Execute() = 0 Then Exit Sub
'--- Si classeur déjà ouvert, on sort ---
On Error Resume Next
For i& = 1 To FS.FoundFiles.Count
  If FS.FoundFiles(i&) <> ThisWorkbook.FullName Then
    Err.Clear
    A$ = Mid(FS.FoundFiles(i&), InStrRev(FS.FoundFiles(i&), "\") + 1)
    Set WB = Workbooks(A$)
    If Err = 0 Then
      MsgBox "Le classeur ''" & A$ & "'' est ouvert. Veuillez le fermer."
      Exit Sub
    End If
  End If
Next i&
On Error GoTo 0
'--- Recherche dans les classeurs ---
Application.ScreenUpdating = False
For i& = 1 To FS.FoundFiles.Count
  If FS.FoundFiles(i&) <> ThisWorkbook.FullName Then
    Set WB = GetObject(FS.FoundFiles(i&))
    Set S = WB.Sheets(1)
    Set R = S.Range(S.Cells(1, 1), S.Cells(S.[f65536].End(xlUp).Row, 7))
    var = R
    For k& = 1 To UBound(var, 1)
      If Trim(LCase(var(k&, 6))) = Trim(LCase(Recherche)) Then
        cpt& = cpt& + 1
        ReDim Preserve T(1 To 3, 1 To cpt&)
        T(1, cpt&) = WB.Name
        T(2, cpt&) = var(3, 3)
        T(3, cpt&) = Recherche
      End If
    Next k&
    WB.Close False
    Set WB = Nothing
  End If
Next i&
Set FS = Nothing
If cpt& = 0 Then
  MsgBox "Aucune occurence du mot ''" & Recherche & "'' n'a été trouvé."
  Application.ScreenUpdating = True
  Exit Sub
End If
'--- Inscription du résultat dans une nouvelle feuille ---
Set WB = ThisWorkbook
Set S = WB.Sheets.Add(after:=WB.Sheets(WB.Sheets.Count))
Set R = S.Range(S.Cells(2, 1), S.Cells(UBound(T, 2) + 1, UBound(T, 1)))
R = Application.Transpose(T)
Set R = S.Range("a1:c1")
R = Array("CLASSEUR", "CLIENT", "MOT RECHERCHE")
R.Font.Bold = True
R.HorizontalAlignment = xlCenter
R.Interior.ColorIndex = 35
S.Cells.Columns.AutoFit
Application.ScreenUpdating = True
End Sub
RESTRICTION
Les classeurs clients doivent être dans le même dossier que le classeur contenant cette macro
et AUCUN autre classeur n'étant pas un classeur clients ne doit s'y trouver.

FONCTIONNEMENT
1) téléchargez l'exemple en pièce jointe pour plus de facilité
2) ouvrez le classeur "Programme" et lancez la macro "RechercheDansClasseurs"
3) renseignez l'InputBox du mot recherché
4) le programme ouvre tous les classeurs et y cherche le mot sélectionné puis affiche le résultat dans une nouvelle feuille

Cordialement.

PMO
Patrick Morange

;) merci pour ta réponse je test la macro et te tiens au courant
@+
 

VBANOVICE

XLDnaute Junior
Re : recherche d'une donnee dans fichiers fermes redemande merci

Bonjour,

Une piste avec le code suivant à copier dans un module standard
Code:
Sub RechercheDansClasseurs()
Dim FS As FileSearch
Dim WB As Workbook
Dim S As Worksheet
Dim R As Range
Dim Recherche
Dim var
Dim i&
Dim k&
Dim cpt&
Dim A$
Dim T()
Recherche = Application.InputBox( _
  prompt:="Tapez le mot recherché.", _
  Title:="Recherche dans les classeurs des clients", _
  Type:=2)
If Recherche = False Then Exit Sub
Set FS = Application.FileSearch
FS.NewSearch
FS.LookIn = ThisWorkbook.Path
FS.FileType = msoFileTypeExcelWorkbooks
If FS.Execute() = 0 Then Exit Sub
'--- Si classeur déjà ouvert, on sort ---
On Error Resume Next
For i& = 1 To FS.FoundFiles.Count
  If FS.FoundFiles(i&) <> ThisWorkbook.FullName Then
    Err.Clear
    A$ = Mid(FS.FoundFiles(i&), InStrRev(FS.FoundFiles(i&), "\") + 1)
    Set WB = Workbooks(A$)
    If Err = 0 Then
      MsgBox "Le classeur ''" & A$ & "'' est ouvert. Veuillez le fermer."
      Exit Sub
    End If
  End If
Next i&
On Error GoTo 0
'--- Recherche dans les classeurs ---
Application.ScreenUpdating = False
For i& = 1 To FS.FoundFiles.Count
  If FS.FoundFiles(i&) <> ThisWorkbook.FullName Then
    Set WB = GetObject(FS.FoundFiles(i&))
    Set S = WB.Sheets(1)
    Set R = S.Range(S.Cells(1, 1), S.Cells(S.[f65536].End(xlUp).Row, 7))
    var = R
    For k& = 1 To UBound(var, 1)
      If Trim(LCase(var(k&, 6))) = Trim(LCase(Recherche)) Then
        cpt& = cpt& + 1
        ReDim Preserve T(1 To 3, 1 To cpt&)
        T(1, cpt&) = WB.Name
        T(2, cpt&) = var(3, 3)
        T(3, cpt&) = Recherche
      End If
    Next k&
    WB.Close False
    Set WB = Nothing
  End If
Next i&
Set FS = Nothing
If cpt& = 0 Then
  MsgBox "Aucune occurence du mot ''" & Recherche & "'' n'a été trouvé."
  Application.ScreenUpdating = True
  Exit Sub
End If
'--- Inscription du résultat dans une nouvelle feuille ---
Set WB = ThisWorkbook
Set S = WB.Sheets.Add(after:=WB.Sheets(WB.Sheets.Count))
Set R = S.Range(S.Cells(2, 1), S.Cells(UBound(T, 2) + 1, UBound(T, 1)))
R = Application.Transpose(T)
Set R = S.Range("a1:c1")
R = Array("CLASSEUR", "CLIENT", "MOT RECHERCHE")
R.Font.Bold = True
R.HorizontalAlignment = xlCenter
R.Interior.ColorIndex = 35
S.Cells.Columns.AutoFit
Application.ScreenUpdating = True
End Sub
RESTRICTION
Les classeurs clients doivent être dans le même dossier que le classeur contenant cette macro
et AUCUN autre classeur n'étant pas un classeur clients ne doit s'y trouver.

FONCTIONNEMENT
1) téléchargez l'exemple en pièce jointe pour plus de facilité
2) ouvrez le classeur "Programme" et lancez la macro "RechercheDansClasseurs"
3) renseignez l'InputBox du mot recherché
4) le programme ouvre tous les classeurs et y cherche le mot sélectionné puis affiche le résultat dans une nouvelle feuille

Cordialement.

PMO
Patrick Morange

merci la macro foctionne, mais serait il possible d'avoir le resultat affiché dans une listbox? au lieu d'une feuille excel

merci de ton aide

@+
 

VBANOVICE

XLDnaute Junior
Re : recherche d'une donnee dans fichiers fermes redemande merci

merci la macro foctionne, mais serait il possible d'avoir le resultat affiché dans une listbox? au lieu d'une feuille excel

merci de ton aide

@+


excusez moi de relancer ma demande,
grace a vous la macro correspond a ce que je recherche, mais j'aimerais avoir le resultat affiché dans une listbox ou msgbox au lieu d'une nouvelle feuille

merci de vore aide

@+
 

PMO2

XLDnaute Accro
Re : recherche d'une donnee dans fichiers fermes redemande merci

Bonjour,

Voici un nouveau code qui autorise soit l'affichage du résultat dans une nouvelle feuille, soit l'affichage du résultat dans une ListBox OU BIEN les 2 affichages à la fois.
Je ne reviens pas sur l'affichage dans une nouvelle feuille qui a déjà été expliqué lors de mon 1er message.
En ce qui concerne l'affichage dans une ListBox, cette dernière est créée dans un UserForm lui-même créé dynamiquement.

Les constantes suivantes sont à adapter selon votre gré
'### Constantes à adapter ###
Const AFFICHER_DANS_LISTBOX As Boolean = True 'True si on veut afficher le résultat dans une ListBox
Const AFFICHER_DANS_FEUILLE As Boolean = False 'True si on veut afficher le résultat dans une nouvelle feuille
'############################
De plus, la création d'un UserForm dynamique EXIGE deux choses
1) faites, dans le VBE, menu Outils/Références… et chargez la librairie Microsoft Forms 2.0 Object Library
si elle n'est pas dans la liste, faites Parcourir... et cherchez-la dans C:\WINDOWS\system32\FM20.DLL où elle devrait être
2) dans Excel, faites menu Outils/Macro/Sécurité et, dans l'onglet Editeurs approuvés, cochez Faire confiance au projet Visual Basic

Voici le nouveau code
Code:
'############################################
'#    Ajouter impérativement la référence   #
'#   suivante dans Menu Outils/Références   #
'#                                          #
'#    Microsoft Forms 2.0 Object Library    #
'#      C:\WINDOWS\system32\FM20.DLL        #
'############################################

'### Constantes à adapter ###
Const AFFICHER_DANS_LISTBOX As Boolean = True  'True si on veut afficher le résultat dans une ListBox
Const AFFICHER_DANS_FEUILLE As Boolean = False 'True si on veut afficher le résultat dans une nouvelle feuille
'############################

Const LARGEUR_UF As Double = 320
Const HAUTEUR_UF As Double = 240
Const MARGE_UF As Double = 20

Public DataListBox As Variant

Sub RechercheDansClasseurs_2()
Dim FS As FileSearch
Dim WB As Workbook
Dim S As Worksheet
Dim R As Range
Dim Recherche
Dim var
Dim i&
Dim k&
Dim cpt&
Dim A$
Dim T()
Dim bool As Boolean
Recherche = Application.InputBox( _
  prompt:="Tapez le mot recherché.", _
  Title:="Recherche dans les classeurs des clients", _
  Type:=2)
If Recherche = False Then Exit Sub
Set FS = Application.FileSearch
FS.NewSearch
FS.LookIn = ThisWorkbook.Path
FS.FileType = msoFileTypeExcelWorkbooks
If FS.Execute() = 0 Then Exit Sub
'--- Si classeur déjà ouvert, on sort ---
On Error Resume Next
For i& = 1 To FS.FoundFiles.Count
  If FS.FoundFiles(i&) <> ThisWorkbook.FullName Then
    Err.Clear
    A$ = Mid(FS.FoundFiles(i&), InStrRev(FS.FoundFiles(i&), "\") + 1)
    Set WB = Workbooks(A$)
    If Err = 0 Then
      MsgBox "Le classeur ''" & A$ & "'' est ouvert. Veuillez le fermer."
      Exit Sub
    End If
  End If
Next i&
On Error GoTo 0
'--- Recherche dans les classeurs ---
Application.ScreenUpdating = False
For i& = 1 To FS.FoundFiles.Count
  If FS.FoundFiles(i&) <> ThisWorkbook.FullName Then
    Set WB = GetObject(FS.FoundFiles(i&))
    Set S = WB.Sheets(1)
    Set R = S.Range(S.Cells(1, 1), S.Cells(S.[f65536].End(xlUp).Row, 7))
    var = R
    For k& = 1 To UBound(var, 1)
      If Trim(LCase(var(k&, 6))) = Trim(LCase(Recherche)) Then
        cpt& = cpt& + 1
        ReDim Preserve T(1 To 3, 1 To cpt&)
        T(1, cpt&) = WB.Name
        T(2, cpt&) = var(3, 3)
        T(3, cpt&) = Recherche
      End If
    Next k&
    WB.Close False
    Set WB = Nothing
  End If
Next i&
Set FS = Nothing
If cpt& = 0 Then
  MsgBox "Aucune occurence du mot ''" & Recherche & "'' n'a été trouvé."
  Application.ScreenUpdating = True
  Exit Sub
End If
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  '°°° Inscription du résultat dans une nouvelle feuille °°°
If AFFICHER_DANS_FEUILLE Then
  Set WB = ThisWorkbook
  Set S = WB.Sheets.Add(after:=WB.Sheets(WB.Sheets.Count))
  Set R = S.Range(S.Cells(2, 1), S.Cells(UBound(T, 2) + 1, UBound(T, 1)))
  R = Application.Transpose(T)
  Set R = S.Range("a1:c1")
  R = Array("CLASSEUR", "CLIENT", "MOT RECHERCHE")
  R.Font.Bold = True
  R.HorizontalAlignment = xlCenter
  R.Interior.ColorIndex = 35
  S.Cells.Columns.AutoFit
End If
  '°°° Inscription du résultat dans un UserForm ListBox °°°
If AFFICHER_DANS_LISTBOX Then
  DataListBox = Application.Transpose(T)
  bool = UserForm_aLaVolee
  Application.ScreenUpdating = True
End If
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Application.ScreenUpdating = True
End Sub

Private Function UserForm_aLaVolee() As Boolean
Dim UF As Object
Dim LB As MSForms.ListBox
Dim CB As MSForms.CommandButton
Dim A$
Dim nbCol&
Dim i&
On Error GoTo Erreur
'--- Crée dynamiquement un UserForm ---
Set UF = ThisWorkbook.VBProject.VBComponents.Add(3)
With UF
  .Properties("Caption") = "Mots trouvés"
  .Properties("Height") = HAUTEUR_UF
  .Properties("Width") = LARGEUR_UF
End With
'--- Crée le bouton de fermeture ---
Set CB = UF.Designer.Controls.Add("forms.CommandButton.1")
With CB
  .Caption = "Fermer"
  .Left = (LARGEUR_UF - CB.Width) / 2
  .Top = HAUTEUR_UF - (3 * MARGE_UF)
End With
'--- Crée la ListBox ---
Set LB = UF.Designer.Controls.Add("forms.ListBox.1")
With LB
  nbCol& = UBound(DataListBox, 2)
  .Left = MARGE_UF
  .Top = MARGE_UF
  .Height = CB.Top - (2 * MARGE_UF)
  .Width = LARGEUR_UF - (2 * MARGE_UF)
  .ColumnCount = nbCol&
  .BoundColumn = 1
    '°°° Calcul de ColumnWidths °°°
  For i& = 1 To nbCol&
    A$ = A$ & (.Width - nbCol&) \ nbCol& & ";"
  Next i&
  .ColumnWidths = Mid(A$, 1, Len(A$) - 1)
    '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  .BackColor = &HC0E0FF
  .BorderStyle = fmBorderStyleSingle
End With
    '°°° Ajout du code évènementiel °°°
A$ = "Sub CommandButton1_Click()" & _
  vbCrLf & "Unload Me" & _
  vbCrLf & "End Sub" & _
     vbCrLf & "Sub UserForm_Initialize()" & _
     vbCrLf & "ListBox1.List=DataListBox" & _
     vbCrLf & "End Sub"
With UF.codemodule
  i& = .CountOfLines
  .insertlines i& + 1, A$
End With
'--- Affiche le UserForm ---
VBA.UserForms.Add(UF.Name).Show
'--- Détruit le UserForm ---
Erreur:
If Not UF Is Nothing Then ThisWorkbook.VBProject.VBComponents.Remove UF
If Err <> 0 Then UserForm_aLaVolee = True
End Function

Cordialement.

PMO
Patrick Morange
 

VBANOVICE

XLDnaute Junior
Re : recherche d'une donnee dans fichiers fermes redemande merci

Bonjour,

Voici un nouveau code qui autorise soit l'affichage du résultat dans une nouvelle feuille, soit l'affichage du résultat dans une ListBox OU BIEN les 2 affichages à la fois.
Je ne reviens pas sur l'affichage dans une nouvelle feuille qui a déjà été expliqué lors de mon 1er message.
En ce qui concerne l'affichage dans une ListBox, cette dernière est créée dans un UserForm lui-même créé dynamiquement.

Les constantes suivantes sont à adapter selon votre gré

De plus, la création d'un UserForm dynamique EXIGE deux choses
1) faites, dans le VBE, menu Outils/Références… et chargez la librairie Microsoft Forms 2.0 Object Library
si elle n'est pas dans la liste, faites Parcourir... et cherchez-la dans C:\WINDOWS\system32\FM20.DLL où elle devrait être
2) dans Excel, faites menu Outils/Macro/Sécurité et, dans l'onglet Editeurs approuvés, cochez Faire confiance au projet Visual Basic

Voici le nouveau code
Code:
'############################################
'#    Ajouter impérativement la référence   #
'#   suivante dans Menu Outils/Références   #
'#                                          #
'#    Microsoft Forms 2.0 Object Library    #
'#      C:\WINDOWS\system32\FM20.DLL        #
'############################################

'### Constantes à adapter ###
Const AFFICHER_DANS_LISTBOX As Boolean = True  'True si on veut afficher le résultat dans une ListBox
Const AFFICHER_DANS_FEUILLE As Boolean = False 'True si on veut afficher le résultat dans une nouvelle feuille
'############################

Const LARGEUR_UF As Double = 320
Const HAUTEUR_UF As Double = 240
Const MARGE_UF As Double = 20

Public DataListBox As Variant

Sub RechercheDansClasseurs_2()
Dim FS As FileSearch
Dim WB As Workbook
Dim S As Worksheet
Dim R As Range
Dim Recherche
Dim var
Dim i&
Dim k&
Dim cpt&
Dim A$
Dim T()
Dim bool As Boolean
Recherche = Application.InputBox( _
  prompt:="Tapez le mot recherché.", _
  Title:="Recherche dans les classeurs des clients", _
  Type:=2)
If Recherche = False Then Exit Sub
Set FS = Application.FileSearch
FS.NewSearch
FS.LookIn = ThisWorkbook.Path
FS.FileType = msoFileTypeExcelWorkbooks
If FS.Execute() = 0 Then Exit Sub
'--- Si classeur déjà ouvert, on sort ---
On Error Resume Next
For i& = 1 To FS.FoundFiles.Count
  If FS.FoundFiles(i&) <> ThisWorkbook.FullName Then
    Err.Clear
    A$ = Mid(FS.FoundFiles(i&), InStrRev(FS.FoundFiles(i&), "\") + 1)
    Set WB = Workbooks(A$)
    If Err = 0 Then
      MsgBox "Le classeur ''" & A$ & "'' est ouvert. Veuillez le fermer."
      Exit Sub
    End If
  End If
Next i&
On Error GoTo 0
'--- Recherche dans les classeurs ---
Application.ScreenUpdating = False
For i& = 1 To FS.FoundFiles.Count
  If FS.FoundFiles(i&) <> ThisWorkbook.FullName Then
    Set WB = GetObject(FS.FoundFiles(i&))
    Set S = WB.Sheets(1)
    Set R = S.Range(S.Cells(1, 1), S.Cells(S.[f65536].End(xlUp).Row, 7))
    var = R
    For k& = 1 To UBound(var, 1)
      If Trim(LCase(var(k&, 6))) = Trim(LCase(Recherche)) Then
        cpt& = cpt& + 1
        ReDim Preserve T(1 To 3, 1 To cpt&)
        T(1, cpt&) = WB.Name
        T(2, cpt&) = var(3, 3)
        T(3, cpt&) = Recherche
      End If
    Next k&
    WB.Close False
    Set WB = Nothing
  End If
Next i&
Set FS = Nothing
If cpt& = 0 Then
  MsgBox "Aucune occurence du mot ''" & Recherche & "'' n'a été trouvé."
  Application.ScreenUpdating = True
  Exit Sub
End If
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  '°°° Inscription du résultat dans une nouvelle feuille °°°
If AFFICHER_DANS_FEUILLE Then
  Set WB = ThisWorkbook
  Set S = WB.Sheets.Add(after:=WB.Sheets(WB.Sheets.Count))
  Set R = S.Range(S.Cells(2, 1), S.Cells(UBound(T, 2) + 1, UBound(T, 1)))
  R = Application.Transpose(T)
  Set R = S.Range("a1:c1")
  R = Array("CLASSEUR", "CLIENT", "MOT RECHERCHE")
  R.Font.Bold = True
  R.HorizontalAlignment = xlCenter
  R.Interior.ColorIndex = 35
  S.Cells.Columns.AutoFit
End If
  '°°° Inscription du résultat dans un UserForm ListBox °°°
If AFFICHER_DANS_LISTBOX Then
  DataListBox = Application.Transpose(T)
  bool = UserForm_aLaVolee
  Application.ScreenUpdating = True
End If
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Application.ScreenUpdating = True
End Sub

Private Function UserForm_aLaVolee() As Boolean
Dim UF As Object
Dim LB As MSForms.ListBox
Dim CB As MSForms.CommandButton
Dim A$
Dim nbCol&
Dim i&
On Error GoTo Erreur
'--- Crée dynamiquement un UserForm ---
Set UF = ThisWorkbook.VBProject.VBComponents.Add(3)
With UF
  .Properties("Caption") = "Mots trouvés"
  .Properties("Height") = HAUTEUR_UF
  .Properties("Width") = LARGEUR_UF
End With
'--- Crée le bouton de fermeture ---
Set CB = UF.Designer.Controls.Add("forms.CommandButton.1")
With CB
  .Caption = "Fermer"
  .Left = (LARGEUR_UF - CB.Width) / 2
  .Top = HAUTEUR_UF - (3 * MARGE_UF)
End With
'--- Crée la ListBox ---
Set LB = UF.Designer.Controls.Add("forms.ListBox.1")
With LB
  nbCol& = UBound(DataListBox, 2)
  .Left = MARGE_UF
  .Top = MARGE_UF
  .Height = CB.Top - (2 * MARGE_UF)
  .Width = LARGEUR_UF - (2 * MARGE_UF)
  .ColumnCount = nbCol&
  .BoundColumn = 1
    '°°° Calcul de ColumnWidths °°°
  For i& = 1 To nbCol&
    A$ = A$ & (.Width - nbCol&) \ nbCol& & ";"
  Next i&
  .ColumnWidths = Mid(A$, 1, Len(A$) - 1)
    '°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  .BackColor = &HC0E0FF
  .BorderStyle = fmBorderStyleSingle
End With
    '°°° Ajout du code évènementiel °°°
A$ = "Sub CommandButton1_Click()" & _
  vbCrLf & "Unload Me" & _
  vbCrLf & "End Sub" & _
     vbCrLf & "Sub UserForm_Initialize()" & _
     vbCrLf & "ListBox1.List=DataListBox" & _
     vbCrLf & "End Sub"
With UF.codemodule
  i& = .CountOfLines
  .insertlines i& + 1, A$
End With
'--- Affiche le UserForm ---
VBA.UserForms.Add(UF.Name).Show
'--- Détruit le UserForm ---
Erreur:
If Not UF Is Nothing Then ThisWorkbook.VBProject.VBComponents.Remove UF
If Err <> 0 Then UserForm_aLaVolee = True
End Function

Cordialement.

PMO
Patrick Morange

:p merci je test ca et te tient au courant
@+
 

Discussions similaires

Statistiques des forums

Discussions
312 448
Messages
2 088 499
Membres
103 871
dernier inscrit
julienleburton