IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Liaison d'un un classeur excel (dans un répertoire)


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Juin 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Liaison d'un un classeur excel (dans un répertoire)
    Bonjour

    Voici ma problématique, j'aimerai scanner tous les fichiers excel dans un répertoire et pour chacun d'entre eux trouver si des liens externes existent

    voici une macro pour trouver tous les fichiers excel d'un répertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Listfichier()
     
     
    Dim Dossier As String, Fichier As String, i As Integer
    Dossier = "C:\Users\RFRO50654\Documents\"
    i = 0
    Fichier = Dir(Dossier)
    Do While Fichier <> ""
    i = i + 1
    Sheets("Feuil1").Range("A" & i) = Fichier
    Fichier = Dir
    Loop
    End Sub
    déja petit hic avec cette première macro, elle ne scanne pas les sous dossier

    et la seconde qui trouve les liaisons dans un classeur actif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub ListLinks()
        Dim xSheet As Worksheet
        Dim xRg As Range
        Dim xCell As Range
        Dim xCount As Long
        Dim xLinkArr() As String
        On Error Resume Next
        For Each xSheet In Worksheets
            Set xRg = xSheet.UsedRange.SpecialCells(xlCellTypeFormulas)
            If xRg Is Nothing Then GoTo LblNext
            For Each xCell In xRg
                If InStr(1, xCell.Formula, "[") > 0 Then
                    xCount = xCount + 1
                    ReDim Preserve xLinkArr(1 To 2, 1 To xCount)
                    xLinkArr(1, xCount) = xCell.Address(, , , True)
                    xLinkArr(2, xCount) = "'" & xCell.Formula
               End If
            Next
    LblNext:
        Next
        If xCount > 0 Then
            Sheets.Add(Sheets(1)).Name = "Link Sheet"
            Range("A1").Resize(, 2).Value = Array("Location", "Reference")
            Range("A2").Resize(UBound(xLinkArr, 2), UBound(xLinkArr, 1)).Value = Application.Transpose(xLinkArr)
            Columns("A:B").AutoFit
        Else
            MsgBox "No links were found within the active workbook.", vbInformation, "KuTools for Excel"
        End If
    End Sub
    Y a t'il un moyen de les combiner ?

    (ces macros ne sont pas de moi, je les ai trouvé sur divers forum)

    Merci d'avance

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Juin 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Bonne nouvelle
    je viens de trouver et modifier une macro pour lister tous les fichiers d'un répertoire et des sous répertoires qui le composent pour en extraire que le fichier execl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    Option Explicit
     
    Dim i As Integer
    Dim Cible As Byte
     
     
    Sub listeDossiersEtSousDossiers()
        Dim Racine As String
     
        Application.ScreenUpdating = False
     
        Racine = Worksheets("Feuil1").Range("D4").Value
        Cible = nbSeparateur(Racine)
        ListeReps Racine, True
     
        Application.ScreenUpdating = True
        i = 0
    End Sub
     
     
    Sub ListeReps(strDossier As String, strSousDossier As Boolean)
        ' adapté de Ole P Erlandsen
        Dim fso As Object, SourceFolder As Object
        Dim SubFolder As Object
        Dim dossier As String, fichier As String
     
        On Error GoTo Fin
     
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set SourceFolder = fso.GetFolder(strDossier)
     
                    fichier = SourceFolder + "\"
                    fichier = Dir(fichier)
     
                    Do While fichier <> ""
                        If Left(Mid(fichier, InStrRev(fichier, ".") + 1), 1) = "x" Then
                        i = i + 1
                        Sheets("Feuil1").Range("A" & i) = SourceFolder + "\" + fichier
                        End If
                        fichier = Dir
                    Loop
     
        If strSousDossier Then
         For Each SubFolder In SourceFolder.SubFolders
     
                    fichier = SubFolder.Path + "\"
                    fichier = Dir(fichier)
     
                   Do While fichier <> ""
                        If Left(Mid(fichier, InStrRev(fichier, ".") + 1), 1) = "x" Then
                        i = i + 1
                        Sheets("Feuil1").Range("A" & i) = SubFolder.Path + "\" + fichier
                        End If
                        fichier = Dir
                   Loop
     
          ListeReps SubFolder.Path, strSousDossier
          Next SubFolder
     
        End If
        Columns("A:A").Select
        ActiveSheet.Range("$A:$A").RemoveDuplicates Columns:=1, Header:=xlNo
        Range("D4").Select
    Fin:
    End Sub
     
     
    Function nbSeparateur(Chemin As String) As Byte
        Dim m As Integer
        Dim Nb As Byte
     
        For m = 1 To Len(Chemin)
            If Mid(Chemin, m, 1) = "\" Then
                Nb = Nb + 1
                m = m + 1
            End If
        Next m
        nbSeparateur = Nb
    End Function
    il me manque plus qu'à lister les liaisons pour chacun des fichiers excel lister
    me là j'aurai besoin de votre aide

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 383
    Points : 659
    Points
    659
    Par défaut
    Bonjour,

    Pour ce qui est de boucler sur tous les fichiers présents dans un dossier et tous ces sous-dossiers, voici ci-dessous un exemple de procédure récursives qui fonctionne bien. Il faut au préalable activer la référence Microsoft Scripting Runtime (Outils >> Références >> cocher la référence "Microsoft Scripting Runtime")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Dim fso As FileSystemObject, dossier As Folder, sousdossier As Folder, fichier As File
     
    Sub ListeFichiers()
     
        Set fso = New FileSystemObject
        Set dossier = fso.GetFolder(Range("A1").Value)
        Call scan(dossier)
     
    End Sub
     
    Public Sub scan(ByVal dossier As Folder)
     
        For Each fichier In dossier.Files
            'code qui s'exécutera sur chaque fichier
            Select Case Right(fichier, 3)
                Case "xls", "lsx", "lsm"
                    'Code qui s'exécutera sur les fichiers Excel
            End Select
        Next
     
        For Each sousdossier In dossier.SubFolders
            'La procédure s'appelle elle-même pour chaque sous-dossier trouvé
            Call scan(sousdossier)
        Next
     
    End Sub
    Dernière petite chose, utilise plutôt les balise de CODE plutôt que celle de QUOTE, elles sont faites justement pour le code
    Demain, je vais commencer par m'acheter des lunettes. Et après, je verrai bien.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Juin 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci pour votre réponse rapide
    j'ai par contre une erreur 70 accès refuser lorsque je veux scanner le dossier mes documents
    vous avez peut être une idée

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 383
    Points : 659
    Points
    659
    Par défaut
    Re,

    Si je me fie à l'aide Microsoft, je dirais que tu essayes d'accéder à un fichier protégé, ou quelque chose comme cela.

    Peux-tu ouvrir ce fichier manuellement ?
    Demain, je vais commencer par m'acheter des lunettes. Et après, je verrai bien.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Juin 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par mat955 Voir le message
    Re,

    Si je me fie à l'aide Microsoft, je dirais que tu essayes d'accéder à un fichier protégé, ou quelque chose comme cela.

    Peux-tu ouvrir ce fichier manuellement ?
    Non pas de fichier protéger
    de plus la macro que j'ai posté juste à l'instant (au dessus de la tienne) fonctionne
    elle peut sans doute être améliorée (car je bidouille un peu) mais j'obtiens le résultat escomptés pour lister les fichiers excel

    Mon souci reste d'interroger maintenant les fichiers que j'ai listé avec cette macro pour voir s'ils ont des liaisons ou pas (et de les lister ces liaisons)
    j'ai une macro qui fait cela, mais pour le fichier en cours, il faudrait être capable de la modifier pour qu'elle scan un fichier du répertoire

    en tout cas merci beaucoup pour ton aide

    Manu

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/05/2008, 17h10
  2. Réponses: 2
    Dernier message: 06/05/2008, 16h05
  3. Réponses: 1
    Dernier message: 25/04/2007, 18h38
  4. Réponses: 6
    Dernier message: 19/02/2007, 16h44
  5. Nommer la feuille du classeur Excel dans lequel on exporte une requête
    Par Thierry'' dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/09/2006, 08h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo