Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Import informations de fichiers fermés

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous,
Je vous souhaite un très beau WE

Il y a quelques temps, mon cher job75 m'avait concocté un code pour importer des informations en provenances de fichiers fermés.
Evidemment, c'est nickel et encore un super MERCI

Je me trouve maintenant devant un autre besoin, bien plus compliqué me semble-t-il, et je n'arrive pas à modifier le code pour l'adapter à ce nouveau besoin.
Voici mon petit exposé :
Pour 6 personnes, j'ai chaque mois un fichier de facturation
Dans chaque fichier de facturation j'ai des onglets nommés avec les Noms des clients facturés.
Chaque mois, les fichiers de facturation sont sauvegardés et un nouveau fichier est créé le mois suivant avec sa date de facturation.
les noms des fichiers (la partie "Sonda 2021 02 28") change :
exemples :
isitelFacturation Charlotte 2019 01 07
isitelFacturation Stephanie 2020 02 03
isitelFacturation Imen 2020 07 05
isitelFacturation Sonda 2018 04 etc.

Dans chaque fichier, chaque onglet a un nom différent
A ce jour, j'ai environ 200 fichiers "isitelFacturation", ce qui représente environ plus de 3000 onglets - moyenne 5 lignes par onglet = 15000 lignes à importer
Tous les fichiers sont identiques et les onglets également.

Tout en continuant à chercher, je me permets de vous solliciter à nouveau pour m'aider à cette adaptation.
Je joins les fichiers test EN POST#2 contenant ;
- le code de Job75 en feuille "Code_Job75",
- mon besoin en feuille "Besoin"
- le fichier "isitelFacturation Sonda 2021 02 28" qui contient les informations à importer

Avec mes remerciements,
Amicalement,
lionel,
 
Dernière édition:
Solution
Bonjour Lionel, soan, le forum,
Il fonctionne nickel mais c'est long.
Oui ExecuteExcel4Macro sur toutes les cellules prend beaucoup trop de temps.

Pour aller vite il faut utiliser des formules de liaison matricielles, fichier (4) :
VB:
Sub Consolider()
Dim t#, chemin$, fichier$, feuille$, ncol%, dest As Range, form$, h As Variant, n&
t = Timer
chemin = ThisWorkbook.Path & "\"
fichier = Dir(chemin & "isitelFacturation*.xlsm") '1er fichier du dossier
If fichier = "" Then MsgBox "Aucun fichier de facturation trouvé..."
feuille = "SuiviRDV"
ncol = 26 'nombre de colonnes à copier dans la feuille source (A:Z)
Set dest = Sheets("Consolidation").[A1] '1ère cellule du tableau, à adapter
Application.ScreenUpdating = False
If...

Usine à gaz

XLDnaute Barbatruc
Re-Bonjour,
Si solution apportée ou si je trouve le bon code, j'aurai un retraitement à faire.
Pour cela, les cellules n'ont pas besoin d'être fusionnées et j'ai modifié mon fichier que je joins au fil.
lionel,
 

Pièces jointes

  • isitelFacturation Sonda 2021 02 28.xlsm
    121.4 KB · Affichages: 14
  • Liaisons_test2.xlsm
    27.9 KB · Affichages: 6
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Lionel,

Pour travailler sur des fichiers sans les ouvrir il faut connaître les noms de tous les onglets.

Or ici ce n'est pas possible, donc il faut ouvrir les fichiers pour copier les données des onglets.

Avec 200 fichiers ça prendra du temps mais c'est très classique et souvent traité sur XLD.

A+
 

Usine à gaz

XLDnaute Barbatruc
Bonjour Gérard
Merci pour ton retour.
Et si dans une feuille du fichier, je mets la liste de tous noms des Clients ... avec la condition si(le nom existe ou le nom est trouvé) ...
Le nom serait forcément trouvé s'il existe dans le fichier.
Ce serait possible ?
lionel,
 
Dernière édition:

job75

XLDnaute Barbatruc
Pour l'instant teste les fichiers joints et cette macro :
VB:
Sub Consolider()
Dim chemin$, fichier$, F As Worksheet, lig&, w As Worksheet, h&
chemin = ThisWorkbook.Path & "\"
fichier = Dir(chemin & "isitelFacturation*.xlsm") '1er fichier du dossier
Set F = Sheets("Consolidation")
lig = 2 '1ère ligne de restitution
Application.ScreenUpdating = False
F.Rows(lig & ":" & F.Rows.Count).Delete 'RAZ
If fichier = "" Then MsgBox "Aucun fichier de facturation trouvé...": Exit Sub
While fichier <> ""
    With Workbooks.Open(chemin & fichier) 'ouverture du fichier
        For Each w In .Worksheets
            If w.FilterMode Then w.ShowAllData 'si la feuille est filtrée
            w.UsedRange = w.UsedRange.Value 'supprime les formules
            w.Columns(1).Replace 0, "", xlWhole 'supprime la valeur zéro
            h = w.Cells(w.Rows.Count, 1).End(xlUp).Row - 79
            If h > 0 Then
                w.Range("A80:AG80").Resize(h).Copy F.Cells(lig, 2) 'copier-coller sur colonne B
                F.Cells(lig, 1).Resize(h) = w.Name 'client en colonne A
                lig = lig + h
            End If
        Next
        .Close False 'fermeture du fichier
    End With
    fichier = Dir 'fichier suivant
Wend
If lig > 2 Then
    With F.Range("A2:AH" & lig - 1)
        .Borders.Weight = xlHairline
        .BorderAround Weight:=xlThin 'pourtour
    End With
End If
With F.UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Tous les fichiers doivent être placés dans le même dossier.

Combien de temps te faut-il pour traiter 200 fichiers ?
 

Pièces jointes

  • isitelFacturation Sonda 2021 02 28.xlsm
    120.6 KB · Affichages: 12
  • Consolidation(1).xlsm
    29.8 KB · Affichages: 7

Usine à gaz

XLDnaute Barbatruc
J'ai importé 2 autre fichiers et ... ça fonctionne apparemment super bien ... wahoooo !!!
Je vais voir pour finaliser avec mon retraitement.

- Serait-il possible d'avoir le nom du fichier importé en colonne A ?
- sans avoir le nom des clients, comment as-tu fais ... c'est magique - impressionnant ?

Déjà Super merci d'avoir regardé et de l'avoir fait ... vraiment chapeau !!!
lionel,
 

job75

XLDnaute Barbatruc
- Serait-il possible d'avoir le nom du fichier importé en colonne A ?
Oui, il suffit de modifier légèrement la macro :
VB:
            If h > 0 Then
                w.Range("A80:AG80").Resize(h).Copy F.Cells(lig, 3) 'copier-coller sur colonne C
                F.Cells(lig, 1).Resize(h) = .Name 'nom du fichier en colonne A
                F.Cells(lig, 2).Resize(h) = w.Name 'client en colonne B
                lig = lig + h
            End If
Utilise ce fichier(2).
 

Pièces jointes

  • Consolidation(2).xlsm
    29.9 KB · Affichages: 8

Usine à gaz

XLDnaute Barbatruc
Re-Gérard,

Désolé d'y revenir,

Je viens de m'apercevoir qu'il manque 1 colonne importée :
RdVs Avant


Je ne vois pas comment modifier le code.

J'ai ajouté la colonne en "C" dans le fichier joint.
Merci Gérard,
lionel,
 

Pièces jointes

  • Consolidation(2).xlsm
    122.4 KB · Affichages: 4

Usine à gaz

XLDnaute Barbatruc
Re-Gérard,

Je crois que j'ai réussi à le faire mais j'ai un souci de format en colonne C que je pense avoir résolu.
Je joins le fichier.
lionel,
 

Pièces jointes

  • Consolidation(2).xlsm
    122.3 KB · Affichages: 3
Dernière édition:

job75

XLDnaute Barbatruc
Tu as a très gros défaut Lionel.

On te donne des solutions qui fonctionnent bien mais ensuite tu fais n'importe quoi.

Et alors tu te demandes pourquoi ça ne va pas

Le seul remède : prendre le temps de comprendre à 100% les solutions qu'on te donne.

Rassure-toi, tu n'es pas le seul à avoir ce défaut, mais toi tu en es à 4229 posts !

PS : je t'ai posé une question sur la durée d'exécution avec 200 fichiers, merci d'y répondre, c'est important...
 

Usine à gaz

XLDnaute Barbatruc
Bonsoir Gérard,

Je sais, c'est vrai je modifie pour adapter "exactement" au besoin complet final qui est souvent lié à d'autres fichiers que j'utilise. Il m'est alors difficile d'expliquer tout le fonctionnement du fichier dans lequel j'ai besoin d'insérer le code de ma demande.

Je vais voir le temps de traitement avec mes 200 fichiers demain matin et je te réponds.
Je suis mortibus de fatigue pour ce soir.
Bonne nuit à toi,
lionel,
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Bonjour Gérard, le Forum,

J'ai lancé l'importation ce matin ... le Job est fait en presque 75 (mn)
C'est long, d'autant plus que ça bloque l'ordinateur pendant tout ce temps.
Mais ça fonctionne, environ 22000 lignes importées.

Je me permets de revenir sur une idée
Et si dans une feuille du fichier, je mets la liste de tous les noms des Clients,
avec recherche : si la feuille nommée même nom est trouvé dans le fichier : il importe les infos

Ce serait possible et permettrait de chercher dans les fichiers sans les ouvrir ?

Bon dimanche
lionel,
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…