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 :

travailler sur deux classeurs


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 24
    Points : 13
    Points
    13
    Par défaut travailler sur deux classeurs
    Bonjour dans un Faq sur ce site j'ai trouvé ça :
    "Dans ce cas on utilises des variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim objWorkbookSource As Workbook, objWorkbookCible As Workbook
    objWorkbookSource = Application.Workbooks.Open(Application.GetOpenFilename)
    objWorkbookCible = Application.Workbooks.Add"
    mais:
    cela me renvoi après avoir selectionné mon fichier l'erreur suivante:
    Erreur d'execution 91
    variable objet ou variable bloc With non définie
    -1- ou est l'erreur?
    -2- Comme souvent dans les tutos il y a plein d'eereurs de syntaxe : quelle est la difference entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objWorkbookSource = Application.Workbooks.Open(Application.GetOpenFilename)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objWorkbookSource = Application.Workbooks.Open(Application.GetOpenFilename())
    de toute façon ça me renvoi la même erreur

    -3- j'ai pas compris à quoi sert la phrase:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objWorkbookCible = Application.Workbooks.Add"
    Merci de vos lumières... Je débute en VBA et suis un ancien programmeur ( assembleur et fortran et j'avoue que que le LOO je suis pas au top)
    à vos réponses

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Bonsoir, et bienvenue sur nos forums

    Personnellement, j'utiliserais le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set Source = Workbooks.Open(Application.GetOpenFilename)
        Set Cible = Workbooks.Add()
    La première récupère le nom du classeur saisi dans la fenêtre de recherche de fichiers
    la deuxième ligne ouvre un classeur vierge

    Attention, il n'y a aucune gestion d'erreur, de sorte que si vous saisissez le nom d'un fichier qui n'est pas un classeur Excel, il y a risque de plantage...

    Pourriez-vous me donner en MP le lien de la faq que vous avez trouvé. Je vérifierai ce lien et nous corrigerons les erreurs éventuelles.

    Merci de votre collaboration, et bonne continuation sur nos forums

  3. #3
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir,

    Je ne connais pas l’auteur du code, mais il a oublié un détail : pour donner un valeur à une variable, le signe égale suffit en général :

    MAIS, ce n’est pas le cas pour les variables objets, pour lesquelles il faut faire précéder le nom de la variable de Set :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim c as Range
        Set c = Range("A1")
    NB - Il y a une exception, Set n’est pas nécessaire si on utilise une boucle For ... Each :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim c as Range
            For Each c in Range("Réf")
     
            Next
    Le code correct est donc (j’ai simplifié les noms de variables) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Test()
    Dim Source As Workbook, Cible As Workbook
        Set Source = Application.Workbooks.Open(Application.GetOpenFilename)
        Set Cible = Application.Workbooks.Add
    End Sub


    Toutefois, il y a d’autres remarques à faire sur le code, trop concis pour être facilement compréhensible par quelqu’un qui débute :

    Open et Add sont 2 méthodes de l’objet Workbook, qui aboutissent toutes 2 à l’apparition d’un nouveau classeur au premier plan ; la première ouvre un classeur existant, et la seconde en crée un nouveau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Set Cible = Application.Workbooks.Add
    équivaut à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Application.Workbooks.Add
        Set Cible = active.Workbook
    Mais surtout,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set Source = Application.Workbooks.Open(Application.GetOpenFilename)
    est dangereux, car GetOpenFilename provoque l’affichage du dialogue d’ouverture de fichier et récupère le nom du document choisi ou Faux si l’utilisateur clique sur le bouton Annuler.

    Dans ce dernier cas,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set Source = Application.Workbooks.Open(Application.GetOpenFilename)
    provoque un plantage, car Faux n’est en général pas le nom d’un document du répertoire actif, et l’ouverture ne peut aboutir.

    Voici un code qui me paraît plus correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
    Dim DocChoisi, Source As Workbook, Cible As Workbook
        DocChoisi = Application.GetOpenFilename
            If Not DocChoisi = False Then
                Set Source = Application.Workbooks.Open(DocChoisi)
                Set Cible = Application.Workbooks.Add
            Else
                ' Traitement s l'utilisateur a choisi le bouton Annuler.
            End If
    End Sub

    Citation Envoyé par TEXMAN1 Voir le message
    Quelle est la difference entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    objWorkbookSource = Application.Workbooks.Open(Application.GetOpenFilename)
     
    et 
     
    objWorkbookSource = Application.Workbooks.Open(Application.GetOpenFilename())
    GetOpenFilename est une méthode de l’objet Workbook, et la paire de parenthèses dans le second cas est parfaitement inutile en l’absence d’argurment.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 24
    Points : 13
    Points
    13
    Par défaut travailler sur deux classeurs
    Bonjour,
    Merci pour vos réponses et conseils pour Vba et pour utiliser le forum.
    Génial et certainement @bientôt

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

Discussions similaires

  1. [XL-2003] Travailler sur deux classeurs avec CITRIX
    Par Domimart dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/01/2011, 14h56
  2. Travailler sur deux classeurs différents
    Par Tyler Durden dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/07/2008, 09h42
  3. [VBA-E] travailler sur deux classeurs
    Par argv666 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/09/2006, 10h40
  4. [VBA-E]travail sur deux classeurs excel
    Par richou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/04/2006, 10h59
  5. travail sur plusieur classeur
    Par calimero91 dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 12/01/2006, 15h37

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