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 :

Données dans différents classeurs [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Apprenti GEII
    Inscrit en
    Janvier 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti GEII
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 83
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    Tout d'abord:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If SupportBaseDeDonnees = Excel then
    UsineAGaz = True
    ProjetCritiquéParDev = True
    MsgBox ("Desolé mais dans mon service tout le monde n'a pas accès à ACCESS donc je fais avec les moyens du bord")
    Endif
    Plus sérieusement, j'ai 8 fichiers dans un répertoire, peu importe le nombre je récupère leurs noms dans un tableau de variables "TabFolder".
    Je souhaite, selon 3 critères (dans une colone particulière) récupèrer les lignes d'une feuille de ces classeurs et les compiler dans un seul tableau bien filtré, compact et utilisisable par la suite.
    Au lieu de faire le filtre post-extraction (en important TOUTE la feuille et triant par la suite, engrangeant pas mal de boucles)
    Je veux faire le filtre pre-extraction, c'est à dire simplement inclure un WHERE dans l'instruction SQL de récupération de données.

    Cependant, (on en arrive au problème), en manipulant le compteur i j'ai testé mon code sur tout les fichiers, 3 sur 8 fonctionnent, je ne sais pas pourquoi...
    L'arrêt d'exécution s'effectue ligne 30 dans le code ci dessous et renvoie le message d'erreur: "Erreur d'exécution' *METTEZ UN GROS NOMBRE ICI*: Type de données incompatibles dans l'expression du critère"

    Debuts de recherche:
    Réflexe, je regarde les différences présentes entre les fichiers qui marchent et qui ne marchent pas, il n'y en a pas de notables...
    J'ai essayé de déclarer mes connections dans un tableau de variables pour bien les différentier entre elles et être sûr que ce n'était pas le fait d'utiliser la même variable qui gênait. (Même si Set Cn = Nothing)

    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
    For i = 1 To UBound(tabfolder, 1)
     
        ReDim Impor(21, 1)
        ReDim TabFiltre(1)
        Set Cn(i) = New ADODB.Connection
        Set oCat = New ADOX.Catalog
     
        'Définit le classeur fermé servant de base de données
        Fichier = "\\sfptf1nas1\" & MonChemin & "\" & tabfolder(i)
     
    With Cn(i)
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
        & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        .Open
    End With
     
        Set oCat.ActiveConnection = Cn(i)
     
        'Nom de la feuille dans le classeur fermé
        For Each Feuille In oCat.Tables
            NomFeuille = Feuille.Name
        Next Feuille
        'ça récupère la feuille que je veux
     
        'Définit la requête.
         texte_SQL = "SELECT frm.* FROM [" & NomFeuille & "] as frm  WHERE frm.Statu='---' OR frm.Statu='3' OR frm.Statu='0';"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn(i).Execute(texte_SQL)
     
        'Stockage
        Impor = Rst.GetRows
        Rst.Close
        '--- Fermeture connexion ---
        Cn(i).Close
        Set Rst = Nothing
     
        '*******TRAITEMENT_IMPOR************
     
    Next i
    Merci de votre lecture et potentielle aide,
    Bonne journée

    J'ai trouvé une piste... Les fichiers qui possèdent un 3 dans la colonne testée plante, les autres marchent... problème de syntaxe SQL ?

    merci

    Avec le code suivant:

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    texte_SQL = "SELECT frm.* FROM [" & NomFeuille & "] as frm WHERE NOT frm.Statu = 1;"

    Les fichiers qui ne possèdent pas de "1" dans la colone Statu font planter, les autres fontionnent...

    Des idées?

  2. #2
    Membre régulier
    Homme Profil pro
    Apprenti GEII
    Inscrit en
    Janvier 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti GEII
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 83
    Points : 109
    Points
    109
    Par défaut re
    Je suis ravi de conclure ce monologue avec une solution, que je communique si jamais quelqu'un rencontre le même type de problème:

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Rst.EOF = False Then
        Impor = Rst.GetRows(Rst.RecordCount)
    End If

    L'argument de GetRows spécifie le nombre de lignes à importer, ici je choisis d'importer le nombre d'occurences de mon RecordSet (Rst.RecordCount).
    Ensuite l'importation est sous condition du Rst.EOF (end of file) qui renvoie false si le pointeur du recordset n'est pas sur le dernier enregistrement.

    A + dans l'bus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/09/2010, 08h56
  2. [XL-2007] Récupérer données dans différents classeurs
    Par Kichott dans le forum Excel
    Réponses: 1
    Dernier message: 14/02/2010, 05h52
  3. Réponses: 1
    Dernier message: 26/11/2008, 15h53
  4. [VBA-E]Récupérer des données dans différents classeurs
    Par christellec20 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/03/2007, 19h32
  5. [VBA-E] Récupérer des données dans différents classeurs
    Par christellec20 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/03/2007, 12h13

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