RechercheV en VBA dans plusieurs classeurs

J'ai besoin de faire une rechercheV en VBA d'un paramètre qui en ligne ms avec condition que la valeur en colonne = le nom de la feuille ou cherche ma valeur et puis faire le somme.si de cette paramètres

Nom de la feuille 1Nom de la feuille 2Nom de la feuille 3Nom de la feuille 4Nom de la feuille 5Nom de la feuille 6Nom de la feuille 7
ma valeur chercher (x)
ma valeur chercher (x)
ma valeur chercher (x)
ma valeur chercher (x)
ma valeur chercher (x)
ma valeur chercher (x)
ma valeur chercher (x)
ma valeur chercher (x)
ma valeur chercher (x)
ma valeur chercher (x)
ma valeur chercher (x)

les feuille peut etre dans plusieurs classeur .

EN VBA

merci d'avance

Bonjour Bara, bonjour le forum,

Le nom de la feuille ne suffit pas ! Si les feuilles peuvent se trouver dans plusieurs fichiers différents, il faudra le nom du fichier, son chemin d'accès complet et le nom de la feuille...

ok j'ai un classeur père et des classeurs où je ferais la recherche dans le même dossier donc ça va être adapté avec ce que tu dis @thautheme .

Re,
Sans le petit fichier représentatif qui va bien je me m'y risquerait même pas... Ton tableau n'en dis pas assez long.

Bnsr

voilà le fichier de mon travail un classeur père et d'Autre classeur dans un dossier secondaire oui je cherche

Merci

3tms-poste.xlsx (153.41 Ko)
2tms-ligne.xlsx (153.44 Ko)
4tms-cellule.xlsx (153.44 Ko)
y a-t-il quelqu'un qui peut aider sur ce sujet

Bonsoir Bara, bonsoir le forum,

Si j'ai bien compris, car tu ne te foules pas pour les explications, essaie le code ci-dessous à placer dans le fichier xlsm :

Option Explicit 'oblige à déclarer toutes les variables

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim F As Variant 'déclare la variable F (Fichier)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OD (Onglet Source)
Dim TVD As Variant 'déclare la variable TVD (Tableau des Valeurs Destination)
Dim TVS As Variant 'déclare la variable TVS (Tableau des Valeurs Source)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)

Set CD = ThisWorkbook 'définit la classeur destination CD
Set OD = CD.Worksheets("MASTER") 'définit l'onglet detination OD
'CA = CD.Path 'définit le chemin d'accès
CA = "C:\Users\hp\Desktop\Charge Viewer\TMS" '
If Dir(spath, vbDirectory) = "" Then MsgBox "dossier inexistant", 16: Exit Sub
OD.Rows(7).ClearContents 'efface le ligne 7 de l'onglet destination
OD.Range("A7").CurrentRegion.Offset(2, 1).ClearContents 'efface les anciennes valeurs de l'onglet destination
F = Dir(CA & "\*.xlsx") 'de'finit le premier fichier F avec l'extension .xlsx ayant CA comme chemin d'accès
Do While F <> "" 'exécute tant qu'il existe des fichiers F
    Set CS = Workbooks.Open(CA & "\" & F) 'définit le classeur source en ouvrant le fichier F
    For Each OS In CS.Sheets 'boucle 1 : sur tous les onglets OS du classeur source
        COL = OD.Cells(7, Application.Columns.Count).End(xlToLeft).Offset(0, 1).Column 'définit la première cellule vide de la ligne 7 de l'onglet OD
        OD.Cells(7, COL) = OS.Name 'renvoie le nom de l'onglet dans la cellule ligne 7 colonne COL
        TVD = OD.Range("A7").CurrentRegion 'définit le tableau des valeurs de la destination TVD
        TVS = OS.Range(OS.Cells(12, 11), OS.Cells(Application.Rows.Count, 11).End(xlUp)) 'définit le tableau des valeurs de la source TVS
        For I = 3 To UBound(TVD, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs destination
            For J = 1 To UBound(TVS, 1) 'boucle 3 : sur toutes les lignes J du tableau des valeurs source
                'si la valeur source est comprise dans la valeur destination, incrémente la cellule ligne I + 6 colonne COL de l'onglet OD
                If InStr(1, TVS(J, 1), TVD(I, 1), vbTextCompare) <> 0 Then OD.Cells(I + 6, COL).Value = OD.Cells(I + 6, COL).Value + 1
            Next J 'prochaine ligne de la boucle 3
        Next I 'prochaine ligne de la boucle 2
    Next OS 'prochaine onglet de la boucle 1
    CS.Close False 'ferme le classeur source sans enregistrer
    F = Dir 'définit le prochain fichier F avec l'extension .xlsx ayant CA comme chemin d'accès
Loop 'boucle
End Sub

merci ThauThème je vais tester le code merci d'avance

bonjour

TVS = OS.Range(OS.Cells(12, 11), OS.Cells(Application.Rows.Count, 11).End(xlUp))

cette partie compte le nombre de fois que la valeur existe

moi je veux faire la somme de la colonne 22 des fichier selon la colonne 11

par exmple somme.si(colonne 22, critère les valeurs dans la colonne 11

onglet source

100 35 s

100 40 s

destination

cellule 1

100 75 s

j'espere que j'ai bien expliquer mon besoin

et merci bcp pour votre aide

Bonjour Bara, bonjour le forum,

Désolé mais j'ai mon PC en panne à la maison et au boulot je n'ai pas temps de te répondre. Je regarde ça des que mon PC sera réparé...

Bonsoir Bara, bonsoir le forum,

Une dernière proposition avec ce code :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim F As Variant 'déclare la variable F (Fichier)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OD (Onglet Source)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim TVD As Variant 'déclare la variable TVD (Tableau des Valeurs Destination)
Dim TVS As Variant 'déclare la variable TVS (Tableau des Valeurs Source)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)

Set CD = ThisWorkbook 'définit la classeur destination CD
Set OD = CD.Worksheets("MASTER") 'définit l'onglet detination OD
'CA = CD.Path 'définit le chemin d'accès
CA = "C:\Users\hp\Desktop\Charge Viewer\TMS" '
If Dir(CA, vbDirectory) = "" Then MsgBox "dossier inexistant", 16: Exit Sub
OD.Rows(7).ClearContents 'efface le ligne 7 de l'onglet destination
OD.Range("A7").CurrentRegion.Offset(2, 1).ClearContents 'efface les anciennes valeurs de l'onglet destination
F = Dir(CA & "\*.xlsx") 'de'finit le premier fichier F avec l'extension .xlsx ayant CA comme chemin d'accès
Do While F <> "" 'exécute tant qu'il existe des fichiers F
    Set CS = Workbooks.Open(CA & "\" & F) 'définit le classeur source en ouvrant le fichier F
    For Each OS In CS.Sheets 'boucle 1 : sur tous les onglets OS du classeur source
        COL = OD.Cells(7, Application.Columns.Count).End(xlToLeft).Offset(0, 1).Column 'définit la première cellule vide de la ligne 7 de l'onglet OD
        OD.Cells(7, COL) = OS.Name 'renvoie le nom de l'onglet dans la cellule ligne 7 colonne COL
        TVD = OD.Range("A7").CurrentRegion 'définit le tableau des valeurs de la destination TVD
        TVS = OS.Range(OS.Cells(12, 11), OS.Cells(Application.Rows.Count, 11).End(xlUp)) 'définit le tableau des valeurs de la source TVS
        For I = 3 To UBound(TVD, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs destination
            For J = 1 To UBound(TVS, 1) 'boucle 3 : sur toutes les lignes J du tableau des valeurs source
                'si la valeur source est comprise dans la valeur destination, ajoute la valeur de la cellule J + 11 colonne 22 de l'onglet OS
                If InStr(1, TVS(J, 1), TVD(I, 1), vbTextCompare) <> 0 Then OD.Cells(I + 6, COL).Value = OD.Cells(I + 6, COL).Value + IIf(OS.Cells(J + 11, 22).Value = "", 0, OS.Cells(J + 11, 22).Value)
            Next J 'prochaine ligne de la boucle 3
        Next I 'prochaine ligne de la boucle 2
    Next OS 'prochaine onglet de la boucle 1
    CS.Close False 'ferme le classeur source sans enregistrer
    F = Dir 'définit le prochain fichier F avec l'extension .xlsx ayant CA comme chemin d'accès
Loop 'boucle
End Sub
Rechercher des sujets similaires à "recherchev vba classeurs"