XL 2010 NB.SI.ENS sur fichiers fermés

  • Initiateur de la discussion Initiateur de la discussion Edwige
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Edwige

XLDnaute Nouveau
Bonjour,

J'ai 10 fichiers :
- Base toto
- Base titi
- Base ....
et un fichier Stat

Je souhaiterai extraire des données des bases pour faire des stats dans un autre fichier.
J'ai noté les NB.si.ens mais si les fichiers "base" sont fermés ça ne fonctionne pas.

Savez vous comment on peut actualiser les données sans ouvrir les fichiers car les personnes doivent pouvoir y enregistrer leur données à tout moment.

Merci pour votre retour
 
Bonjour,

Merci beaucoup pour ce retour.
Du coup tu me confirmes bien que les nb.si.ens ne fonctionnent pas sur les fichiers externes ?

Je ne connais pas les formules liaisons.
J'ai copié les 4 fichiers, j'ai modifié le lien pour le repertoire mais rien ne se passe. Je dois modifier autre chose ?

1611915084047.png
 
Bonjour Edwige,

Pour chemin soit vous utilisez ThisWorkbook.Path soit vous utilisez le chemin d'accès du dossier et le terminez par un antislash "\".

Et pour le reste il faudrait nous dire ce que vous voulez faire et déposer les fichiers.

A+
 
Merci pour ce retour rapide.
J'ai effectivement ajouté le "\" et enlever le ThisWorkbook.Path, 🤦‍♀️et ça fonctionne ! Merci
Ça me convient finalement mieux d'avoir la concaténation des bases au même endroit ! Et surtout sans avoir besoin d'ouvrir les fichiers un par un !
Du coup je peux utiliser mon Nb.si.ens !!! 😊
Merci pour votre aide précieuse !
 
J'ai essayé de mettre en pratique vos modèles mais j'ai quelques difficultés.
Les bases de mes collaborateurs commencent à la ligne 7 (la ligne 6 étant l’en-tête).
Je n'arrive pas à bien concaténer : je perds toute la mise en forme, j'ai des lignes dupliquées, et des #N/A, ...
Et autres contraintes, je dois garder les valeurs à 0 (c'est une note) et laisser à vide les cellules vides. J'ai enlevé le .Replace 0, "", xlWhole mais j'ai des 0 partout du coup ....

Je vous joins les fichiers.
L'onglet BASE(2) est l'onglet de concaténation qu'il me faudrait
 

Pièces jointes

Téléchargez les fichiers joints dans le même dossier.

Puisque vous voulez copier les formats et surtout conserver les zéros il faut ouvrir chaque fichier source :
VB:
Sub Assembler()
Dim chemin$, fichier$, lig&, w As Worksheet, h&
chemin = ThisWorkbook.Path & "\" 'dossier à adapter
fichier = Dir(chemin & "*.xlsm") '1er fichier du dossier
lig = 7 '1ère ligne de restitution, à adapter
Application.ScreenUpdating = False
With Feuil2 'CodeName à adapter
    .Rows(lig & ":" & .Rows.Count).Delete 'RAZ
    While fichier <> ""
        If fichier <> ThisWorkbook.Name Then
            Set w = Workbooks.Open(chemin & fichier).Sheets(1) 'ouverture du fichier
            h = Application.Match("zzz", w.Columns(1))
            If h > 6 Then
                w.Rows(7).Resize(h - 6).Copy .Cells(lig, 1)
                lig = lig + h - 6
            End If
            w.Parent.Close False 'fermeture du fichier
        End If
        fichier = Dir 'fichier suivant
    Wend
    With .UsedRange: End With 'actualise les barres de défilement
End With
End Sub
Bonne nuit.
 

Pièces jointes

Bonjour,
Merci pour votre retour.
C'est plus confortable pour moi de ne pas avoir besoin d'ouvrir tous les fichiers. C'est assez long.
Il vaut mieux que les liaisons se fassent directement. Je vais faire remplacer mes 0 et 1 par N et NC.
Je ferai une macro à la suite qui met en forme les dates et qq données.
Je vais reprendre votre première solution.
Cela dit, je ne comprends pas :
- je n'arrive pas à garder mes 2 premières lignes d'en-tète. La macro ne me garde que la 1ère ligne, elle m'efface la 2ème à chaque fois
- les données de la base d'Alba sont dupliquées
- il y a des #N/A à la fin du tableau
Merci infiniment,
Edwige
 

Pièces jointes

Bonjour Edwige,

Oui avant d'adapter une macro il faut avoir parfaitement compris son fonctionnement :
VB:
Sub Assembler()
Dim chemin$, fichier$, feuille$, ncol%, lig&, form$, h&
chemin = ThisWorkbook.Path & "\" 'dossier à adapter
'chemin = "\\W113101003af\GDB_C2S_RT\Supervision\supervision 2021\FichiersSources\TEST\test3\" 'dossier à adapter
fichier = Dir(chemin & "*.xlsm") '1er fichier du dossier
feuille = "BASE" 'nom des feuilles à copier, à adapter
ncol = 85 'nombre de colonnes, à adapter
lig = 3 '1ère ligne de restitution, à adapter
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Feuil2 'CodeName à adapter
    .Rows(lig & ":" & Rows.Count).Delete 'RAZ
    While fichier <> ""
        If fichier <> ThisWorkbook.Name Then
            form = "'" & chemin & "[" & fichier & "]" & feuille & "'!"
            h = 0
            On Error Resume Next
            h = ExecuteExcel4Macro("MATCH(""zzz""," & form & "C1)") 'calcul sur colonne 1
            On Error GoTo 0
            If h > 6 Then
                With .Cells(lig, 1).Resize(h - 6, ncol)
                    .FormulaArray = "=" & form & "R7C1:R" & h & "C" & ncol 'formule de liaison matricielle
                    .Value = .Value 'supprime la formule
                End With
                lig = lig + h - 6
            End If
        End If
        fichier = Dir 'fichier suivant
    Wend
    With Range("A3:A" & lig - 1).Resize(, ncol)
        .Replace 0, "", xlWhole 'efface les valeurs zéro
        .Borders.Weight = xlThin 'bordures
    End With
    With .UsedRange: End With 'actualise les barres de défilement
End With
End Sub
Les mises en forme (largeurs des colonnes, tailles des polices, renvois à la ligne) ont été faites manuellement une fois pour toutes.

A+
 

Pièces jointes

Dernière édition:
Bonsoir,

Merci effectivement, la partie est assez floue pour moi. Je n'ai pas un gros niveau en VBA.
If fichier <> ThisWorkbook.Name Then
form = "'" & chemin & "[" & fichier & "]" & feuille & "'!"
h = 0
On Error Resume Next
h = ExecuteExcel4Macro("MATCH(""zzz""," & form & "C1)") 'calcul sur colonne 1
On Error GoTo 0
If h > 6 Then
With .Cells(lig, 1).Resize(h - 6, ncol)
.FormulaArray = "=" & form & "R7C1:R" & h & "C" & ncol 'formule de liaison matricielle
.Value = .Value 'supprime la formule
End With
lig = lig + h - 6
End If

Par contre j'ai une autre problématique. J'ai d'autres onglets dans mes fichiers de saisie de mes collaborateurs. Quand je fais tourner la macros, elles sont supprimées.... 😢. Quelle est la ligne de la macro qui supprime ces onglets? ou comment faire pour les laisser?
 
Dans les fichiers sources la macro ne traite que les onglets dont le nom est BASE, c'est clair dans le code.

Les autres onglets sont ignorés mais ne sont pas du tout supprimés, comment le pourrait-on ???
Oui c'est bon, désolée, je m'étais trompée de fichier ..... La fatigue de la journée se fait sentir ...
Je dois faire une pause ! 😴😴
En tout cas merci pour tout. Vous m'avez bien aidé ! 🤗
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
37
Affichages
892
Réponses
2
Affichages
633
  • Question Question
Microsoft 365 recherche idée
Réponses
6
Affichages
821
Retour