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 :

CopyFromRecordset bug aléatoire [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de CODYCO
    Homme Profil pro
    Webplanneur
    Inscrit en
    Avril 2009
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 217
    Par défaut CopyFromRecordset bug aléatoire
    Bonjour,

    Voici mon code qui me pose probleme et voici mon probleme

    J'ouvre un fichier excel en base de donnée (fichier assez gros) il me lit la premiere ligne et la copie le tout dans une boucle tant que nous ne sommes pas sur le derniere enregistrement.

    Jusque la tout va bien mais à la ligne "ActiveCell.CopyFromRecordset Rst
    " il bug de manière aléatoire et me renvoie une erreur CopyFromRecordset de l'objet Range a échoué...

    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
     
    Dim Source As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim ADOCommand As ADODB.Command
        Dim Fichier As String, Cellule As String, Feuille As String, I As String
     
        'Adresse de la cellule contenant la donnée à récupérer
        I = 2
        Cellule = "A" & I & ":BK" & I & ""
     
        Feuille = "Feuil1$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = V_Imp
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
     
        Set ADOCommand = New ADODB.Command
     
        'While Not (Rst.EOF)
     
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        While Not (Rst.BOF)
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        'Range("A5").Activate
        ActiveCell.CopyFromRecordset Rst
        ActiveCell.Offset(1, 0).Activate
        I = I + 1
        Cellule = "A" & I & ":BK" & I & ""
        Wend
     
     
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    Merci d'avance...

  2. #2
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    le Cellule = "A" & I & ":BK" & I & "" a t-il besoin du & "" terminal?

  3. #3
    Membre expérimenté Avatar de CODYCO
    Homme Profil pro
    Webplanneur
    Inscrit en
    Avril 2009
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 217
    Par défaut
    Définitivement non merci de la correction
    mais cela ne résoud pas le problème...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,
    pour qu'activecell soit valide, encore faut-il s'assurer qu'il y ait bien une cellule active. Ce mode de fonctionnement est possible, mais nécessite une "garantie" que la cellule active soit bien celle qu'on attend

    Ne t'est-il pas possible de passer par un Range().CopyFromRS directement ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre expérimenté Avatar de CODYCO
    Homme Profil pro
    Webplanneur
    Inscrit en
    Avril 2009
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 217
    Par défaut
    Oui je me suis assuré de ca, la cellule de déstination est activé avant la création du ADO, toute cette partie fonctionne bien c'est juste que la recopie via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.CopyFromRecordset Rst
    bug parfois en lecture normale du code, si je passe en mode débug et appui F8 la ligne de code passe et cela rebug quelques lignes plus loin.

    Je ne vois pas sur quel critere...

    Bon j'alimente moi meme la discusion qui ne semble pas passionner les foules...

    Premiere éléments de réponse sur ce bug, il semble que les retours chariots contenu dans certaine cellule de mon fichier source ne soit pas apprécié en gestion ADO, j'ai donc éliminé ces colonnes qui au finale n'étaient pas traitées.

    Mais à la 5438 ligne traitée nouveau message: " erreur d'exécution; instruction sql, delete, insert procedure, select ou update attendus" poourtant il viens de traité ma requette plus de 5000 fois... je sèche!

  6. #6
    Membre expérimenté Avatar de CODYCO
    Homme Profil pro
    Webplanneur
    Inscrit en
    Avril 2009
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 217
    Par défaut Tout seul comme un grand
    Bon définitivement ce sujet n'aura pas passionné...

    J'aurais finalement résolu mon problème tout seul comme un grand, et vous donne mon code final si un jour ca intérresse...

    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
     
     
    Sub extractionValeurCelluleClasseurFerme()
        Dim Source As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim ADOCommand As ADODB.Command
        Dim Fichier As String, Cellule As String, Feuille As String, I As String
     
        'Cellule de destination
        Worksheets("Liste").Activate
        Range("A5").Activate
     
        Feuille = "Feuil1$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = V_Imp 'Variable public définie par boite de dialogue du fichier source
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
     
        Source.CursorLocation = adUseClient
        Set ADOCommand = New ADODB.Command
     
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenForwardOnly, adLockOptimistic, adLockReadOnly
     
        'Compte le nombre d'entré dans le fichier source 
        Set Rst = Source.Execute("SELECT count(*) as NbLignes FROM [" & Feuille & "]")
     
        I = Rst("nbLignes")
        Cellule = "A2" & ":BH" & I & ""
     
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
       ActiveCell.CopyFromRecordset Rst
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    End Sub
    Merci à tous et à moi même pour une fois

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

Discussions similaires

  1. [XL-2003] Bug aléatoire
    Par olivier-tig dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/05/2009, 14h38
  2. Réponses: 1
    Dernier message: 15/10/2007, 14h05
  3. Bug aléatoire et pas très bien compris (open/close_system)
    Par LordPeterPan2 dans le forum Simulink
    Réponses: 8
    Dernier message: 03/07/2007, 11h08
  4. Réponses: 5
    Dernier message: 15/01/2007, 10h45
  5. [bug aléatoire] sauvegarde dans un fichier
    Par poukill dans le forum C++
    Réponses: 11
    Dernier message: 30/05/2006, 08h36

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