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 :

Copier les données d'un classeur vers un autre - message d'erreur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet test logiciel
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet test logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Par défaut Copier les données d'un classeur vers un autre - message d'erreur
    Bonjour,

    Je commence VBA depuis quelques jours et j'ai rencontré pas mal de pb que j'ai pu résoudre avec votre forum.
    Ici, je bloque depuis plus de 2h sur le même message d'erreur en tournant le sujet dans tous les sens, je n'en peux plus... :'(
    Je franchie donc le pas et lance une bouteille à la mer.

    J'essaie bêtement de copier les données d'un classeurs vers un autre, avec une recherche de fichier dans une boite de dialogue.

    Voici le code avec la ligne en rouge qui génère le message suivant "Erreur d'exécution '91' : Variable objet ou variable de bloc With non définie"
    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
    Sub ExtraireDonneesExport()
    
    Application.ScreenUpdating = False 'rend intouchable le classeur en court de travail
        Dim ClasseurDest As Workbook
        Dim ClasseurSource As Workbook
        Dim FeuilLancement As Worksheet
        Dim FeuilDestAno As Worksheet
        Dim FeuilDestCT As Worksheet
        Dim FeuilSourceAno As Worksheet
        Dim FeuilSourceCT As Worksheet
        Dim MaxColAno As Long, MaxLigAno As Long, MaxColCT As Long, MaxLigCT As Long
            
        Set ClasseurDest = ActiveWorkbook
        Set FeuilLancement = ActiveSheet
        
        Dim nf
        nf = Application.GetOpenFilename("Fichiers Xls,*.xls")
        If nf = False Then
           'MsgBox "Traitement abandonné"
           Exit Sub
        End If
    
    's'il est déjà ouvert, le traitement plante
    On Error GoTo Err_Test ' Gestion des erreurs
    
        Workbooks.Open Filename:=nf
        Set ClasseurSource = Workbooks(nf)
        
        Set FeuilSourceAno = ClasseurSource.Worksheets("Résultat Ano>RQ")
        Set FeuilSourceCT = ClasseurSource.Worksheets("Résultat CT>RQ")
            
    Err_Test:         ' Étiquette de branchement en cas d'erreur
                      ' ou suite du traitement ordinaire.
        If Err.Number = 1004 Then   ' S'il y a une erreur (l'Objet Err contient les informations)...
            MsgBox "Veuillez fermer le fichier Source et relancer le traitement"    ' Mon message d'erreur,
            Resume Next                                                             ' Reprend à la ligne suivante,
            Exit Sub
        End If
            
    On Error GoTo 0
    
    
        Range(FeuilSourceAno.[A1]).Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlToRight)).Select
        Selection.Copy
        MaxColAno = Selection.Columns.Count 'il faut 18 colonnes => erreur à mettre en place si le contraire
        MaxLigAno = Selection.Rows.Count
        
    
        Range(FeuilDestAno.Cells(1, MaxLigAno), FeuilDestAno.[AA:9999]).Select
        Selection.ClearContents
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
        
        
        
        
        
        
        FeuilLancement.Cells(6, 2) = Now                   ' jour et heure de modification
        FeuilLancement.Cells(7, 2) = Application.UserName      ' Utilisateur
    
    'MonRange.Find(What as Variant)
    ' => renvoi un range si trouve
    ' => Nothing sinon (erreur à gérer)
    
    Application.ScreenUpdating = True 'permet la modification du classeur (interrompue au début du Sub)
    
    End Sub
    D'avance merci de votre aide

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Commence par virer tous les On Error de ton code.
    En phase de développement, c'est le meilleur moyen pour masquer les problèmes sans les résoudre et transformer le débugage en une chasse au dahu.

    Ensuite, dans la fenêtre de variables locales, regarde ce que contient la variable FeuilSourceAno.

    Et, juste avant ta ligne rouge, place un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print FeuilSourceAno.[A1]
    Et décrit ce que renvoie la fenêtre d'exécution.

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet test logiciel
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet test logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Par défaut
    J'ai effectivement voulu bien faire les choses avec mes captures d'erreur et ça cachait bien une erreur "Erreur exé '9' L'indice n'appartient pas à la sélection" plus haut dans le code, sur la ligne 2 ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Workbooks.Open Filename:=nf
        Set ClasseurSource = Workbooks(nf)
    Pour rappel, j'avais défini ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Dim ClasseurSource As Workbook

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Qu'est-ce qu'il y a dans nf juste au moment du Open ?


    Tu devrais remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set ClasseurSource = Workbooks(nf)
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set ClasseurSource = ActiveWorkbook
    C'est moins risqué.
    Pour info, après un Open, le classeur ouvert devient systématiquement le classeur actif.

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet test logiciel
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet test logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Par défaut
    Effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ClasseurSource = ActiveWorkbook
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ClasseurSource = Workbooks.Open(nf)
    Maintenant, j'ai le message d’erreur "Erreur d'exé 1004 La méthode 'Range' de l'objet '_Global' a échoué" sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Range(FeuilSourceAno.[A1]).Select
    Dans le debug de FeuilSourceAno.[A1], j'ai le contenu de la cellule attendu

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Les rudiments (les bases les plus basiques) font ici défaut !
    Il est indispensable de comprendre les relations entre objets et propriétés.
    On se réfère par exemple ainsi à la plage (ici une cellule) A1 de l'objet Feuille Feuil1 d'un objet classeur Classeur1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("classeur1").Worksheets("Feuil1").Range("A1")
    Voilà. Retrousse tes manches et surtout ouvre tes yeux (l'aide VBA est à lire).

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par dumbast Voir le message
    Dans le debug de FeuilSourceAno.[A1], j'ai le contenu de la cellule attendu
    Si ce n'est pas trop indiscret, tu pourrais partager cette information ?

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

Discussions similaires

  1. [XL-97] Copier les données d'une classeur vers 2 autres
    Par XstephaniemartinX dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/02/2014, 11h48
  2. [MySQL] Copier les données d'une table vers une autre
    Par kamnouz dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/12/2008, 16h48
  3. Copier les données d'un champs vers un autre champs
    Par Waumy dans le forum VBA Access
    Réponses: 4
    Dernier message: 22/11/2008, 05h58
  4. copier des données d'un classeur vers un autre
    Par jackall dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 01/08/2008, 18h20
  5. Réponses: 12
    Dernier message: 09/06/2008, 18h54

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