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 :

Erreur 9 et ouverture de fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 20
    Points
    20
    Par défaut Erreur 9 et ouverture de fichier
    Bonjour à toutes et à tous, accros au VBA sous Excel

    Je suis en train de monter un classeur excel dont le but est de comparer deux feuilles entre elles et pointer les différences dans une troisième. Cette partie fonctionne parfaitement, c'est la partie acquisition des données que je souhaite améliorer.

    En effet, je souhaiterais avoir un code permettant à l'utilisateur d'obtenir la fenêtre "ouvrir fichier", récupérer le contenu de la feuille 1 de ce fichier (quelque soit son nom, pour des raisons de portabilité de code), le copier et le rapatrier dans une feuille "N" de mon classeur.

    J'arrive bien à provoquer l'ouverture du fichier, mais je dois avoir des problèmes pour désigner correctement sur quel fichier je veux faire ma copie, puisque je récupère invariablement des erreurs "Subscript Out of Range"...

    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
    Sub N()
        Dim wb As Workbook, wks As Worksheet
     
        'Vide le contenu de N avant de demander l'ouverture du fichier
        Sheets("N").Select
        Cells.Select
        Selection.ClearContents
        Range("A1").Select
     
        'Appelle la boite d'ouverture de fichier
        MonFichier = Application.GetOpenFilename("Fichiers Excel (*.xl*), *.xl*")
     
    If MonFichier <> False Then
        'Ouvre le fichier spécifié
        Workbooks.Open Filename:=MonFichier
        Set wb = Workbooks(MonFichier)
        Set wks = wb.Sheets(1)
     
        'Détecte le nombre de lignes et crée une zone de sélection
        Dim LastLig3 As Long
     
        LastLig3 = ActiveSheet.Range("A65536").End(xlUp).Row
        Range("A" & LastLig3 & ":J" & LastLig3).Select
        Selection.Copy
        Windows("comparaison.xls").Activate
        Sheets("N").Select
        ActiveSheet.Paste
    End If
    Le reste du code est à l'avenant, puisqu'il a été réalisé à l'enregistreur de macro

    Je pense que le problème doit venir de la variable MonFichier, laquelle contient le chemin complet du fichier, et non juste le nom. Peut être faudrait-il que "j'expurge" le chemin de cette variable...

    Merci pour vos lumières

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour;

    Tu peux essayer de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set wb = Workbooks(MonFichier)
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set wb = Workbooks.Open(MonFichier)
    Par ailleurs, pour faire une copie tu n'est pas oubligé de faire une sélection : voir méthode copy de l'objet Range.

    Cordialement,

    PGZ

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour
    je récupère invariablement des erreurs "Subscript Out of Range"
    Sur quelle ligne du code le plantage ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    Ok merci, ça passe.
    L'instruction suivante doit définir la plage de données à sélectionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        'Détecte le nombre de lignes et crée une zone de sélection
     
        Dim LastLig3 As Long
        LastLig3 = ActiveSheet.Range("A65536").End(xlUp).Row
        Range("A" & LastLig3 & ":J" & LastLig3).Copy
    J'ai déjà utilisé cette instruction pour la partie comparaison. Par fainéantise () j'ai recopié cette ligne en espérant que ça fonctionne.
    Sauf que LastLig3 revient toujours avec la valeur 1 (j'ai fait l'essai avec un fichier de 2000 lignes et la zone de sélection ne se fait que sur la première ligne)...

  5. #5
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Si tu cherches la dernière cellule de la colonne A dans la feuille 1 du classeur qui vient d'être ouvert, alors tu peux essayer de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLig3 = ActiveSheet.Range("A65536").End(xlUp).Row
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLig3 = wks.Range("A65536").End(xlUp).Row
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLig3 = wks.Range("A" & Application.Rows.count).End(xlUp).Row
    C'est mieux?

    PGZ

  6. #6
    Membre à l'essai
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    C'est parfait.

    Pour la suite, je m'en sors avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Workbooks("comparaison.xls").Activate
    Sheets("N").Select
    Range("A1").Select
    ActiveSheet.Paste
    Et ça fonctionne. Merci à tous

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu peux t'en passer de tes Activate et Select!
    si tu mettais ton code "final", il peut être amélioré

  8. #8
    Membre à l'essai
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    Oui, il doit être possible de tout regrouper en une seule ligne...
    Quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("comparaison.xls").Sheets("N") ...

Discussions similaires

  1. [Excel] Erreur dés l'ouverture du fichier Excel Exporté
    Par M.sarah1988 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 23/12/2014, 10h43
  2. Réponses: 2
    Dernier message: 06/08/2008, 08h43
  3. erreur à la ré-ouverture du fichier Excel
    Par bybelos33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/07/2007, 15h52
  4. erreur sur l'ouverture d'un fichier .mdb
    Par valoum dans le forum Access
    Réponses: 2
    Dernier message: 17/04/2006, 22h36
  5. Erreur d'ouverture de fichier :s
    Par NeuroGen dans le forum Général Python
    Réponses: 3
    Dernier message: 15/03/2006, 12h51

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