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

Requêtes et SQL. Discussion :

transfert fichier excel plusieurs feuilles - passer à la suivante si feuille n'existe pas


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier Avatar de totor92290
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 418
    Points : 102
    Points
    102
    Par défaut transfert fichier excel plusieurs feuilles - passer à la suivante si feuille n'existe pas
    Bonjour à tous,
    J'ai un petit projet access qui me permet de charger toutes les feuilles d'une grande quantité de fichiers excel.
    Ces fichiers ne sont pas tous identiques quant à la quantité de feuilles - parfois des feuilles en plus parfois en moins
    J'ai adapté ce code (ci-dessous) pour "capturer" toutes les feuilles de tous les fichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Import into a 2eme TEMP table
                Set wb = xlApp.Workbooks.Open("D:\xxxxxx\xxxxxxx\xxxxxxxxx\" & fileName, True, False)
                Set ws = wb.Worksheets("Feuille1")                '
        'Transfer
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "TXXX_xxxxxxx1_TEMP", "D:\xxxxxx\xxxxxxx\xxxxxxxxx\" & fileName, False, "xxxxxxxxxx1!"
            wb.Close True
    '*****
        'Import into a 3eme TEMP table
                Set wb = xlApp.Workbooks.Open("D:\xxxxxx\xxxxxxx\xxxxxxxxx\" & fileName, True, False)
                Set ws = wb.Worksheets("Feuille2")                '
        'Transfer
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "T005_xxxxxxxxx2_TEMP", "D:\xxxxxx\xxxxxxx\xxxxxxxxx\" & fileName, False, "xxxxxxxxx2!"
            wb.Close True
    Malheureusement, si la feuille n'existe pas - PAF - ça bug.
    Est-il possible d'ajouter une ou plusieurs lignes et de vérifier si la feuille existe, et si elle n'existe pas alors on passe à la suivante ?
    C'est faisable ?

    D'avance, un grand Merci

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 640
    Points : 14 614
    Points
    14 614
    Par défaut
    bonjour,
    lit la collection des feuilles du classeur à l'aide d'une boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Set wb = xlApp.Workbooks.Open("D:\xxxxxx\xxxxxxx\xxxxxxxxx\" & fileName, True, False)
        For i = 1 To wb.Sheets.Count
        'Import into a TEMP table
            Set ws = wb.Worksheets(i)                '
        'Transfer
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "TXXX_xxxxxxx" & i & "_TEMP", "D:\xxxxxx\xxxxxxx\xxxxxxxxx\" & fileName, False, "xxxxxxxxxx" & i & "!"
        next i
        wb.Close True
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre régulier Avatar de totor92290
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 418
    Points : 102
    Points
    102
    Par défaut
    Bonjour Tee,
    Désole pour mon retour tardif !
    En fait je me suis mal exprimé...
    Tous les fichiers excel ont de multiples feuilles avec des noms différents (dans mon exemple "Feuille1", "Feuille2"; "Feuille3", "Feuille4"...)
    J'ai repris ces noms en adaptant chacune de mes lignes.
    Mais dans certains fichiers, il manque, par exemple la "Feuille2"
    Donc j'ai ajouté, comme tu m'y invite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 1 To wb.Sheets.Count
    et
    aux mêmes endroits sur l'ensemble de mes lignes, mais dans mon premier fichier la "Feuille2" n'existe pas ... donc ça bloque !

    C'est quoiki bloque ?

    Merci

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 640
    Points : 14 614
    Points
    14 614
    Par défaut
    bonsoir,
    on va récupérer les feuilles existantes (et qui ont des lignes) dans un tableau et avec Mid() on va récupérer le numéro de la feuille plutôt que son indice dans la collection:
    Code VBA : 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
    Dim i As Integer
    Dim tabloFeuilles() As String
     
    Set wb = xlApp.Workbooks.Open("D:\xxxxxx\xxxxxxx\xxxxxxxxx\" & fileName, True, False)
     
    For i = 1 To wb.Sheets.Count
        ' chargement du nom de la feuille si elle contient des lignes
        If wb.Worksheets(i).UsedRange.Rows.Count > 1 Then
            ReDim Preserve tabloFeuilles(i - 1)
            tabloFeuilles(i - 1) = wb.Worksheets(i).Name
        End If
    Next i
     
    For i = 0 To UBound(tabloFeuilles)
        'Import into a TEMP table
         DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "TXXX_xxxxxxx" & mid(tabloFeuilles(i), 8, 2) & "_TEMP", "D:\xxxxxx\xxxxxxx\xxxxxxxxx\" & fileName, False, tabloFeuilles(i) & "!"
    next i
     
    wb.Close True
    sinon si "xxxxxxx" représente le nom de la feuille ici:"TXXX_xxxxxxx" on peut se passer de Mid():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "TXXX_" & tabloFeuilles(i) & "_TEMP"
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

Discussions similaires

  1. [Toutes versions] Sendmail envoi 1 feuille fichier excel plusieurs destinataires en CC
    Par pr54230 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/12/2013, 22h47
  2. [WD16] Ecriture Fichier Excel à plusieurs feuilles
    Par JustineJ dans le forum WinDev
    Réponses: 2
    Dernier message: 27/10/2011, 12h51
  3. [AC-2003] Import d'un fichier Excel à plusieurs feuilles vers Access
    Par cosmonaute666 dans le forum VBA Access
    Réponses: 3
    Dernier message: 24/06/2009, 18h00
  4. Transfert Fichier excel dans une table ACCESS
    Par Remsdu dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/07/2008, 15h55
  5. [CR] export Excel (plusieurs feuilles)
    Par kaiserben dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 21/11/2005, 15h03

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