Recherche de données dans plusieurs classeurs et plusieurs onglets

Adc

XLDnaute Nouveau
Bonjour,

Je cherche à centraliser des données d'autres classeurs mais je ne sais pas comment m'y prendre. Je m'explique.

Je travaille sur 10 classeurs de 10 onglets chacun. Chaque onglet liste des commandes (colonne A = n° de commande, B = date de commande, C = fournisseur; etc jusqu'à colonne J). Je souhaiterais créer une requête dans un 11ème classeur, qui listerait parmi tous les onglets de tous les classeurs, les commandes passées depuis plus de 2 mois et non payées.

En PJ un tableau avec 2 onglets de commandes où j'ai surligné les commandes répondant aux critères de recherche (mise en forme conditionnelle) et un 3ème "Relances" qui ressemble à ce que je voudrais.

En espérant trouver de l'aide.

Cordialement,

Adc.
 

Pièces jointes

  • Tableau 1.zip
    12.8 KB · Affichages: 81

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche de données dans plusieurs classeurs et plusieurs onglets

Bonjour Adc et bienvenu dans le forum, bonjour le forum,

Il est possible, je crois, de faire ça avec les classeurs fermés mais je sais pas faire... On peut par macro demander d'ouvrir un classeur, y relever les données onglet par onglet puis le refermer. C'est pas trop compliqué mais il faut pour cela que tu nous donnes les noms des classeurs à traiter et le nom du 11 ème classeur. Il sera bien évidemment préférable que tous ces classeurs se trouvent dans le même dossier que le classeur Recap (le 11ème).
Dans l'attente de ce complément d'information pour te proposer quelque choses...
 

Adc

XLDnaute Nouveau
Re : Recherche de données dans plusieurs classeurs et plusieurs onglets

Bonjour à tous les deux,

Les classeurs se nomment Tableau 1, Tableau 2, etc. Le 11ème classeur s'appellera "Relances". Ils se trouvent effectivement dans le même dossier.

Je vais éplucher les liens d'Hippolite pour voir si je comprends quelques chose.

Si la manip est faisable, est-ce que ça ne risque pas de donner une macro à rallonge ?

Adc.

PS: merci pour la bienvenue, Robert !
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche de données dans plusieurs classeurs et plusieurs onglets

Bonjour Adc,Hippolite, bonjour le forum,

Je te propose la macro commentée ci-dessous qui ouvre les fichiers Tableau x les uns après les autres, scanne les onglets de chaque classeur, récupère les lignes correspondant à la formule de la mise en forme automatique, puis referme le classeur Tableau x et va au suivant... Tu dois placer cette macro dans le classeur Relances.xls.
Code:
Sub Macro1()
Dim s As Workbook 'déclare la variable s (classeur Source)
Dim r As Workbook 'déclare la variable r (classeur Relances)
Dim chem As String 'déclare la variable chem (CHEMin d'accès)
Dim i As Byte 'déclare la variable i (incrément de classeur)
Dim x As Byte 'déclare la variable x (incrément d'onglet)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim dest As Range 'déclare la variable dest (DESTination)
 
Set r = ThisWorkbook 'définit le classeur Relances
chem = r.Path & "\" 'définit le chemin d'accès
For i = 1 To 10 'boucle 1 : sur les 10 classeurs "Tableau"
    Workbooks.Open (chem & "Tableau " & i & ".xls") 'ouvre le classeur indexé
    Set s = ActiveWorkbook 'définit le classeur source s
    For x = 1 To s.Sheets.Count 'boucle 2 : sur tous les onglets du classeur source
        With Sheets(x) 'prend en compte l'onglet indexé
            'boucle 3 : sur toutes les cellules éditées cel de la colonne B
            For Each cel In .Range("B10:B" & .Range("B65536").End(xlUp).Row)
                'condition : si la date du jour est  supérieure de 2 mois à celle de la celllule cel
                'et si la colonne H est vide
                If Date > CDate(Day(cel.Value) & "/" & Month(cel.Value) + 2 & "/" & Year(cel.Value)) _
                    And cel.Offset(0, 6).Value = 0 Then
                    ' definit la cellule de destination
                    Set dest = r.Sheets("Relances").Range("A65536").End(xlUp).Offset(1, 0)
                    dest.Value = Split(s.Name, ".", -1)(0) 'nom du classeur dans la cellule de destination
                    dest.Offset(0, 1).Value = Sheets(x).Name ' onglet dans la cellule colonne B
                    'copie la plage A:G de cel et la colle dans la colonne C de dest
                    .Range(cel.Offset(0, -1), cel.Offset(0, 5)).Copy dest.Offset(0, 2)
                End If 'fin de la condition
            Next cel 'prochaine cellule cel de la boucle 3
        End With 'fin de la prise en compte de l'onglet indexé
    Next x 'prochain onglet de la boucle 2
    s.Close 'ferme le classeur indexé
Next i 'prochain classeur de la boucle 1
End Sub

Attention il faut revoir la condition car 01/11/2010 + deux mois me donne 13/01/2010 au lieu de 01/01/2011...
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche de données dans plusieurs classeurs et plusieurs onglets

Bonjour Adc, bonjour le forum,

Oui, je ne sais sais pas si ça vient des paramètres de mon clavier (Clavier : USA Internatial / Langue : Portugais (Brésil)) mais impossible d'obenir la condition. J'ai pensé que peut-être Cdate(cel.Value) + 61 conviendrait ?
 

Adc

XLDnaute Nouveau
Re : Recherche de données dans plusieurs classeurs et plusieurs onglets

Bonjour Robert,

Oui c'est d'autant plus étrange que chez moi ça fonctionne. Si je note 01/11/2010 en B14, j'obtiens bien 01/01/2011 avec la fonction =DATE(ANNEE(B14);MOIS(B14)+2;JOUR(B14)). Mais il doit y avoir un meilleur moyen de transcrire cette fonction en VBA, j'imagine.

Adc.
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 322
Membres
103 178
dernier inscrit
BERSEB50