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 :

Lire dans classeur fermé plage cellule, sans récupérer valeur dans classeur de travail


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut Lire dans classeur fermé plage cellule, sans récupérer valeur dans classeur de travail
    Bonjour,

    Je cherche à lire une plage de cellule d'un classeur fermé. Aujourd'hui, j'ai un classeur, 4 feuilles dont 2 que je suis obligé de copier/coller (=j'extrais d'un outil du boulot, un ensemble de données, je les copie/colle dans une de mes feuille, exemple "Resu"), et j'aimerai m'éviter de copier/coller ces feuilles….ça alourdi mon classeur, et inutilement car j'ai juste besoin de lire des données.

    J'ai lu avec attention l'excellent Tuto de Silkyroad sur les classeurs fermés, mais à chaque fois, on rapatrie les valeurs, alors que moi, je veux juste les lire…

    En effet, dans ma macro, je lis et met sous tableau une plage de cellule, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tblo = Sheets("Resu").Range("A2:AL1000").Value
    "Resu" étant une des feuilles que je copie/colle

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tblo = ThisWorkbook.path & "/[Resu.xls]Feuil1!A2:A1000"
    mais ça ne fonctionne pas…

    Merci pour votre aide,

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci Kiki29,

    C'est justement à ce tuto que je faisais référence…dans les différents exemple, il y a l'importation de la feuille et/ou l'importation des données dans le classeur actif, perso, je souhaite juste lire les données du classeur fermé, sans les "rapatrier"….puisque j'en ai juste besoin pour remplir mon tableau, et donc pas besoin de tout rapatrier…je souhaite juste les lire, remplir mon "Tblo"….

    Merci,

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé 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 : 72
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Pour lire toute une plage, je pense que tu es obligé soit d'ouvrir une connexion sur le classeur fermé, soit d'utiliser une plage dans ton classeur ouvert.
    Si tu fais peu d'interrogation de ton classeur fermé, la deuxième solution peut être assez performante. Il suffit que tu prévois une feuille, ici "Brouillon", éventuellement masquée pour cela.
    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
    Sub subLitPlageClassFermed()
    Dim sRep As String
    Dim sClass As String
    Dim sFeuil As String
    Dim sPlage As String
    Dim sFormul As String
    Dim vTablo As Variant
     
     
    sRep = ThisWorkbook.Path 'si les classeurs (ouvert et fermé) sont dans le même répertoire 
    sClass = "Nom du classeur.xlsx"
    sFeuil = "Resu"
    sPlage = "A2:AL1000"
    sFormul = "='" & sRep & "\[" & sClass & "]" & sFeuil & "'!" & sPlage
     
    With ThisWorkbook.Worksheets("Brouillon").Range(sPlage)
        .FormulaArray = sFormul
        vTablo = .Value
        .Delete
    End With
     
    '...
     
    vTablo = Empty
    End Sub
    vTablo est renseigné et Brouillon est vidé.

    Cordialement,

    PGZ

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci pgz,

    Merci pour ce code et cette idée : copie/colle puis efface, permettant un classeur "léger"….

    Par contre, il est possible que dans ma feuille "Resu", je n'ai pas toujours le même nombre de ligne, et j'ai vu qu'avec le code, il mettait "0" lorsque par exemple, je n'ai que 500 lignes, le reste étant remplies de "0"….y a t il un moyen de résoudre ce problème ?

    Juste pour mon info personnelle : pourquoi mettre (je ne suis pas encore très à l'aise avec les tableaux, mais lorsque je vois la rapidité, je commence à des plus en plus les utiliser….merci d'éclairer ma lanterne….

    Merci,

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé 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 : 72
    Localisation : France

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

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

    Pour les 0, je ne vois pas trop quoi faire à la base, c'est inhérent à la méthode. Par contre, suivant ce que tu cherches, tu peux faire un traitement de ce que tu as chargé pour nettoyer tout cela. Par exemple si dans la première colonne tu attends un titre, s'il n'y est pas, tu vides les données correspondantes du tableau. Ou encore dès la première ligne où il n'y a que des 0, c'est la fin du tableau. C'est à toi de voir quelle est la logique des données que tu charges, mais cela devrait être simple à coder.

    Pour le c'est juste une libération de la variable, après utilisation, bien-sûr.

    Cordialement,

    PGZ

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

Discussions similaires

  1. Récupérer valeur dans une cellule - insertion ligne
    Par userparis dans le forum Excel
    Réponses: 2
    Dernier message: 10/02/2014, 13h50
  2. [XL-2007] Copier que les cellules avec des valeurs dans une plage.
    Par Fred4345 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 24/11/2011, 20h20
  3. Réponses: 7
    Dernier message: 29/11/2010, 21h52
  4. derniere cellule non vide d'un classeur fermé
    Par la-breche dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/03/2007, 21h09
  5. Récupérer valeur dans un thread
    Par Nasky dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 07/06/2006, 21h37

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