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

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
 

Edwige

XLDnaute Nouveau
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
 

job75

XLDnaute Barbatruc
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+
 

Edwige

XLDnaute Nouveau
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 !
 

Edwige

XLDnaute Nouveau
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

  • SaisieSupervisionGDB_2021_AA.xlsm
    192.5 KB · Affichages: 15
  • SaisieSupervisionGDB_2021_MF.xlsm
    188.1 KB · Affichages: 2
  • BaseSupervisionGDB_2021.xlsm
    206.8 KB · Affichages: 3

job75

XLDnaute Barbatruc
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

  • BaseSupervisionGDB_2021(1).xlsm
    28 KB · Affichages: 2
  • SaisieSupervisionGDB_2021_AA.xlsm
    192.5 KB · Affichages: 1
  • SaisieSupervisionGDB_2021_MF.xlsm
    188.1 KB · Affichages: 1

Edwige

XLDnaute Nouveau
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

  • BaseSupervisionGDB_2021.xlsm
    210.6 KB · Affichages: 4
  • SaisieSupervisionGDB_2021_AA.xlsm
    38.6 KB · Affichages: 2
  • SaisieSupervisionGDB_2021_MF.xlsm
    84.3 KB · Affichages: 2

job75

XLDnaute Barbatruc
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

  • Base(1).xlsm
    25 KB · Affichages: 5
  • Saisie1.xlsm
    35.4 KB · Affichages: 4
  • Saisie2.xlsm
    77.2 KB · Affichages: 4
Dernière édition:

Edwige

XLDnaute Nouveau
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?
 

Edwige

XLDnaute Nouveau
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é ! 🤗
 

Discussions similaires

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg