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 :

Référence incorrecte ou non qualifiée


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Référence incorrecte ou non qualifiée
    Bonjour à tous et à toutes,

    Je commence à coder dans vba depuis quelques semaines donc je bloque de temps en temps.
    Je rencontre un problème dans une macro que je suis en train de faire.
    Je souhaite ouvrir un fichier (FichierSource) et coller les données dans un autre fichier de destination (identifié comme FichierRef dans le code).

    J'obtiens l'erreur suivante lorsque j'essaie de lancer la macro : "référence incorrecte ou non qualifiée".

    Voici le code :
    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
    Option Explicit
     
    Sub Copier_données()
    '
    ' Copier_coactivite Macro
    '
    Dim DerniereLigneSource As Long
    Dim DerniereLigneRef As Long
    Dim FichierSource As Workbook
    Dim FichierRef As Workbook
    '
    '
        'Définit le ou les fichiers à ouvrir
        FichierSource = Application.GetOpenFilename
        If VarType(FichierSource) = vbBoolean Then MsgBox "Action annulée" _
        'Else MsgBox "Fichier sélectionné : " & NomFichier
        Workbooks.Open (FichierSource)
     
        '
        'Sélection des données à copier
        DerniereLigneSource = FichierSource.Range("A" & .Row.Count).End(xlUp).Row
        Range(Range("A4"), DerniereLigneSource).Select
        Selection.Copy
        End With
     
        'Passage sur le fichier sur lequel on veut coller les données
        Set FichierRef = ActiveWorkbook
        DerniereLigneRef = FichierRef.Range("A" & .Rows.Count).End(xlUp).Row
        FichierRef.Activate
        Next
     
        FichierRef.Activate
        Worksheets("Données importées").Select
        Range("G20").Select
     
        MsgBox "Veuillez coller les informations du fichier Source", vbOKOnly + vbInformation, "Copie des données source"
        'Copie de la zone utilisée
     
        'On colle des informations copiées
        Selection.Paste
        FichierSource.Close False
        Application.ScreenUpdating = True
    End Sub
    Je pense qu'il manque une instruction, il manquerait un with quelque part mais je ne sais pas comment corriger vraiment ce problème.
    Merci pour vos commentaires ou conseils.

    A bientôt

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 255
    Points
    34 255
    Par défaut
    Bonjour,
    Plusieurs choses ici :
    - lorsque tu veux utiliser une variable, il faut l'appeler par son nom correct. Comme tu vas appeler ton chien Milou alors qu'il s'appelle Tintin

    Je pense qu'il est ici question d'un WbRef, alors que tu utilises WbBrief ensuite (noms différents)

    - Pour ouvrir un classeur, la fonction Workbooks.Open prend en paramètre une chaine de caractères qui correspond au chemin du classeur que tu veux ouvrir.
    La variable WbSource étant d'un type WorkBook, il faudrait que tu changes ton code pour partir sur quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim CheminSource as String
    CheminSource = Application.GetOpenFilename
    Set WbSource = Workbooks.Open (CheminSource )
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Bonjour Jean-Philippe et aurel,

    Complètement d'accord avec ce que dit Jean-Philippe, dans ton code tu as un wbBrief qui traîne, on ne sait pas d'où il sort. Peut-être as-tu voulu écrire "wbRef" car tu le saisis ainsi sur les lignes suivantes ?

    Par rapport à l'utilisation de Workbooks.Open, tu as bien évidemment la possibilité d'utiliser ta variable dedans, mais comme l'a dit Jean-Philippe, tu dois inscrire le chemin et non le nom du fichier.

    Et je suis toujours titillé par les "derLig". J'en utilisais énormément avant que l'on me conseille vivement, à raison, de passer à l'utilisation de Tableaux Structurés. Leur utilisation a simplifié d'une façon déconcertante l'exécution de mes codes et sa compréhension.

  4. #4
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Tout d'abord, merci pour vos réponses c'est sympa de prendre un peu de votre temps.
    J'ai édité mon premier message au niveau du code pour une question de clarté par rapport à vos commentaires.

    Ta réponse, Jean Philippe ne me convint pas pour l'instant car la variable en question concerne l'ouverture d'un fichier même si cela permet d'ouvrir une boîte de dialogue sur un répertoire.
    Cela ne concerne pas l'erreur que je rencontre qui se situe au niveau de la syntaxe du code pour moi.
    Enfin, je comprends où vous souhaitez en venir sur la différence entre fichier et chemin maintenant ...

    La proposition de Révèr est une bonne suggestion mais ne me permet pas de résoudre le problème posé pour le moment.
    Les références structurées est un outil très intéressant, il faut que je me penche dessus mais ça va me prendre du temps pour l'utiliser dans vba.

    L'utilisation d'une variable derLig a correctement fonctionné dans un autre code que j'ai réalisé mais qui est fonctionnel.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Comme on me l'a si bien dit, "perdre" du temps à comprendre les Tableaux Structurés pour en gagner par la suite est très rentable. Surtout lorsque tu le manipules beaucoup, ce qui est mon cas. Je ne pourrai que te conseiller de prendre de ton temps, tout comme on me l'a conseillé, pour te familiariser avec ces derniers

    Je me doute bien que l'utilisation de "derLig" fonctionne, mais avec les TS tu n'auras pas besoin de t'embêter avec cette variable. Ca sera autant d'erreurs potentielles en moins

  6. #6
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    J'ai résolu mon problème, car je souhaitais pour le moment rester sur le code vba existant.
    Pour les références externes, je regarderai prochainement.

    Je voulais garder le code que j'avais commencé car mes échéances pour livrer la macro sont très proches.

    Voici ce que je suis arrivé à faire pour le moment :
    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
    Option Explicit
     
    Sub Copier_coactivite()
    Dim CheminSource As String
    Dim DerLigCoactivite As Long
    Dim DerLigBrief As Long
    Dim WbCoactivite As Workbook
    Dim WbBrief As Workbook
    Dim SourceRange As Range
    Dim FillRange As Range
    Dim NSemaine As Integer
     
    '
    ' Copier_coactivite Macro
    '
    Set WbBrief = ActiveWorkbook
    WbBrief.Activate
     
        DerLigBrief = Worksheets("Donnees importees (2)").Cells(Rows.Count, 1).End(xlUp).Row
        Range("A4", "F" & DerLigBrief).Select
        Selection.ClearContents
        Selection.UnMerge
        'Définit le ou les fichiers à ouvrir
        With WbCoactivite
            CheminSource = Application.GetOpenFilename
            If VarType(WbCoactivite) = vbBoolean Then MsgBox "Action annulée" _
        'Else MsgBox "Fichier sélectionné : " & NomFichier
        Set WbCoactivite = Workbooks.Open(CheminSource)
        End With
        '
        'Sélection des données à copier
        With WbCoactivite
            NSemaine = Application.InputBox("Saisir le N° de semaine pour préparer le fichier Brief", Type:=1)
            Worksheets(NSemaine).Select
            'DerLig = Range(("A") & .Rows.Count).End(xlUp).Row
            'DerLig = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Address
        End With
     
        'Copie de la zone utilisée
        DerLigCoactivite = WbCoactivite.Worksheets(NSemaine).Cells(Rows.Count, 1).End(xlUp).Row
        Range("A4", "F" & DerLigCoactivite).Select
        Selection.Copy
     
        'Passage sur le fichier sur lequel on veut coller les données
        WbBrief.Activate
        Sheets("Donnees importees (2)").Select
        'Wb.Close False
     
        'On colle des informations copiées
        ActiveSheet.Range("A4").Select
        Selection.PasteSpecial Paste:=xlPasteAll
     
        'Selection.Column.Hidden = True
        With WbCoactivite
            Rows("5:" & DerLigCoactivite).AutoFit
            Selection.SpecialCells(xlCellTypeBlanks).Select
            Selection.Delete Shift:=xlUp
        End With
     
        'copie_cellules Planification
        'With WbBrief
            'Worksheet("Donnees importees").Range("G4:K4").Select
            'Selection.AutoFill Destination:=Range("G4:K" & DerLig), Type:=xlFillDefault
        'End With
        WbBrief.Activate
        Sheets("Donnees importees (2)").Select
     
        Set SourceRange = Worksheets("Donnees importees (2)").Range("G4:K4")
        Set FillRange = Worksheets("Donnees importees (2)").Range("G4:K" & DerLigBrief)
        SourceRange.AutoFill Destination:=FillRange
     
        Application.ScreenUpdating = True
    End Sub
    Et ma question initiale portait surtout sur la syntaxe, en tout cas merci d'avoir d'avoir répondu.

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

Discussions similaires

  1. Static Context dans une classe non qualifiée
    Par JeanNoel53 dans le forum NetBeans
    Réponses: 4
    Dernier message: 17/11/2010, 19h00
  2. Réponses: 5
    Dernier message: 28/04/2010, 15h54
  3. Référence d'objet non définie
    Par Perceuse-Killer dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/06/2008, 20h11
  4. Erreur d'exécution 3420 => objet incorrect ou non défini
    Par LeJay64 dans le forum VBA Access
    Réponses: 6
    Dernier message: 05/10/2007, 10h45
  5. Réponses: 10
    Dernier message: 03/03/2005, 14h36

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