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 :

faire des index / equiv dans un fichier fermé [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut faire des index / equiv dans un fichier fermé
    Bonjour,
    j'ai besoin de récupérer des adresses dans un classeur fermé sur le serveur (il est utilisé par les utilisateurs en lecture seule).
    il s'agit d'un listing d'adresse, il faut donc que je récupère, dans 5 variables, le contenu de 5 cellules contigues.
    j'ai bien compris qu'il fallait passer par ADO, mais je n'ai pas trouvé d'exemples qui fonctionnent (encore) et qui soient expliqués pour que je l'adapte à mon besoin.
    En plus pour corser ma demande, la recherche doit se faire dans une feuille VeryHidden et protégée (mais je connais le mot de passe ).

    Est-ce que quelqu'un peut m'aider ?
    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Salut,
    A mon humble avis, c'est pas possible!
    Avec ADODB, on peux récupérer des données sur une feuille
    d'un classeur fermé, et c'est tout!
    On ne peut pas manipuler les objets du classeur.
    Mais pourquoi ne pas faire une copie du fichier et ensuite
    le manipuler à ta guise avec les commandes VBA bien connues?
    Cordialement,

  3. #3
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 515
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 515
    Points : 16 444
    Points
    16 444
    Par défaut
    Bonjour

    Ces fonctions marchent sur classeur fermé

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Si tu connais la feuille et le cellules [A1];[B1] etc.. C'est possible avec Adodb.

    On ne peut pas faire de crureneregion mais on peut même récupérer qu'une cellule si on veut!

    Sql="Select * From [Feuil1$A1:A1]"
    Dernière modification par Invité ; 21/04/2016 à 22h54.

  5. #5
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour à tous et merci de vos réponses qui m'ont fait réfléchir...

    J'ai trouvé un code qui pourrait me satisfaire pour un autre projet en parallèle : on rappatrie les données des cellules constantes pour une liste de fichier du même répertoire.
    J'ai essayé de l'adpaté, cela fonctionne, sauf que le programme, à chaque fichier, m'ouvre une fenêtre "Mettre à jour les valeurs : Fichier1.xls". Suite de quoi je dois ouvrir le répertoire puis le bon fichier...
    Je ne sais pas comment rectifier le chemin.
    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
    Option Explicit
    Const Chemin As String = "C:\Users\RécupFich Fermé" 'a adapter
    Const LigDep As Byte = 2 'ligne de départ à adapter
     
    Sub ExtraireAvecXL4()
     Dim Nbre As Long, Lig As Long, Cptr As Long
     Dim Fichier As String
    'On a sur la feuille active ("A2:A1000") la liste des fichiers pour lesquels,
    'on veut récupérer les contenus des cellules B2 et D2'au regard de chacun des fichiers et sans les ouvrir
    Nbre = Application.CountA(Range("A2:A1000"))
     
    Lig = LigDep
     Application.ScreenUpdating = False
     For Cptr = 1 To Nbre
         Fichier = Cells(Lig, 1) & ".xls"  'nom des fichiers à rappatrier en colon1
         'appel macroXL4 dite de "Walkenbach"=> récup B2 D2
         Cells(Lig, 2) = ExecuteExcel4Macro("'" & Chemin & "\[" & Fichier & "]BdD'!R2C2") 'B2
         Cells(Lig, 3) = ExecuteExcel4Macro("'" & Chemin & "\[" & Fichier & "]BdD'!R2C3") 'D2
         Lig = Lig + 1
     Next
     End Sub
    En ce qui concerne le problème qui m'a fait ouvrir ce poste, je voudrais plus simplement copier la feuille "BdD" du Fichier "Adresses.xlsm", dans le classeur actif, sanchant que BdD est VeryHidden.

    Là encore j'ai trouvé un code que j'essaye d'adapter (pour l'instant je travaille sur un fichier de test qui n'est ni protégé, ni masqué :
    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
    Option Explicit
    Option Base 1
     
    Sub ChercheFichiersFermesV03()
    Dim Source As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim Fichier As String, Direction As String, texte_SQL As String
    Dim X As Integer, NbFichiers As Integer, Y As Integer, N As Integer
    Dim Tableau() As String
     
    Application.ScreenUpdating = False
     
    Direction = Dir(ThisWorkbook.Path & "\*.xls")
            Fichier = ThisWorkbook.Path & "\" & "Etablissement01.xls"
            Debug.Print Fichier
     
            Set Source = New ADODB.Connection
            Source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
                            "data source=" & Fichier & ";" & _
                            "extended properties=""Excel 8.0;"""
     
            texte_SQL = "SELECT * FROM [Explanations$]"
     
            Set Rst = New ADODB.Recordset
            Set Rst = Source.Execute(texte_SQL)    'BUG ICI
     
            ThisWorkbook.Sheets.Add after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 'ajout feuille dans classeur
            ActiveSheet.Name = "BddRecup" & X 'renomme la feuille créée
            ActiveSheet.Range("A1").CopyFromRecordset Rst 'import des données
     
     
            Rst.Close
            Source.Close
    Application.ScreenUpdating = True
    End Sub
    Mais j'ai un bug ici : Set Rst = Source.Execute(texte_SQL) avec le message "Le moteur de BdD Microsoft Jet n'a pas pu trouver l'objet 'Explanations$'...

    Merci de bien vouloir m'aider encore.

  6. #6
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    J'ai encore essayé, avec le Tuto
    http://silkyroad.developpez.com/VBA/...sFermes/#LIV-A
    Mais tous les codes que j'essaie bug sur .Open avec le message "Mise à jour impossible. la base de données est en lecture seule"
    Or ce fichier n'est pas en lecture seule.
    J'ai activé les références Microsoft ActiveX Data Objects (Multi-Dimensional)2.8 Library et Microsoft ActiveX Data Objects 2.8 Library
    Merci

  7. #7
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 515
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 515
    Points : 16 444
    Points
    16 444
    Par défaut
    Bonjour

    Juste pour info, pourquoi as-tu renoncé à INDEX EQUIV qui fonctionnement sur fichier fermé ?

  8. #8
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Je ne renonce pas au contraire. J'aimerais savoir faire, mais ce n'est pas le cas...

  9. #9
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour,
    Je suis toujours en recherche d'une solution...
    Dans le tuto http://silkyroad.developpez.com/VBA/...sFermes/#LIV-A, il est dit
    Avant de vous lancer dans l'exploration du modèle ADO, n'oubliez pas qu'Excel possède 2 outils afin de lire dans un classeur fermé:
    Les formules de liaison:
    ='C:\Documents and Settings\mimi\dossier\excel\[ClasseurBase.xls]Feuil1'!$A$1

    Cependant, j'essaye d'utiliser les tables plutot que les valeurs de tableaux, et là j'ai un pb :
    si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     =RECHERCHEV(A12;'C:\Documents and Settings\[BdD.xlsx]BdD'!$C:$O;2;FAUX)
    fonctionne, je n'arrive pas à faire fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(A12;'C:\Documents and Settings\BdD.xlsx'!TbBdD[[Commune]:[ADRESSE]];2;FAUX)
    il doit y avoir un truc pour déclarer la plage, mais je ne vois pas.
    merci pour votre aide

  10. #10
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    En ce qui concerne la solution ADO, j'essaie toujours de comprendre même si ce n'est pas nécessaire dans mon projet actuel...
    Toujours dans le tuto http://silkyroad.developpez.com/VBA/...sFermes/#LIV-A
    une macro qui permet de se connecter à un classeur afin d'extraire le contenu de la feuille nommée "Feuil1".
    Je l'ai essayé, mais j'ai 2 gros pb :
    • l'exemple pris concerne un fichier xls (j'ai dupliqué ma base de données en un fichier xls et un xlsx) ; cela fonctionne pour le 1er, pas pour le 2ème (Motif La table externe n'est pas dans le format attendu - et cela pointe sur la ligne .Open
    • le 2ème pb est plus grave, c'est que toutes les données ne remontent pas, par exemple ma colonne A s'arrete à la ligne 9 sur 14000, la colonne B a des plages vides.


    Nom : Z fich Ferm ADO.jpg
Affichages : 1288
Taille : 117,6 Ko
    Que dois-je faire ? Merci pour votre aide

  11. #11
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
                            "data source=" & Fichier & ";" & _
                            "extended properties=""Excel 8.0;IMEX=1;"""

  12. #12
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour rdurupt,
    Merci de ta réponse, maintenant, j'ai l'erreur
    la table externe n'est pas dans le format attendu.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Cn
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .ConnectionString = "Data Source=" & Fichier & ";Extended Properties=""Excel 12.0 Xml;IMEX=1;"""
            .Open
        End Withl

  14. #14
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Merci rdurupt, cela fonctionne parfaitement, je n'ai plus de "trous" dans mon fichier, tout est bien remonté.

    le coté ADO est résolu, j'attends encore une réponse pour la façon d'écrire une plage pour récupérer une donnée d'un fichier fermé, et je valide le tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(A12;'C:\Documents and Settings\BdD.xlsx'!TbBdD[[Commune]:[ADRESSE]];2;FAUX)
    Encore merci rdurupt

  15. #15
    Invité
    Invité(e)

  16. #16
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 515
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 515
    Points : 16 444
    Points
    16 444
    Par défaut
    Bonjour
    Citation Envoyé par mouftie Voir le message
    ... j'attends encore une réponse pour la façon d'écrire une plage pour récupérer une donnée d'un fichier fermé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(A12;'C:\Documents and Settings\BdD.xlsx'!TbBdD[[Commune]:[ADRESSE]];2;FAUX)
    La référence à des données externes ne peut pas se faire en référence tableau. Seules les adresses classiques de plages (éventuellement nommées) peuvent être utilisées.

  17. #17
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour à Tous,
    Merci pour vos aides, j'ai réussi d'une part à faire remonter toute une base et d'autre part à récupérer des données particulières.

    Pour info, le fait que le fichier fermé soit protégé et que la feuille de base de données soit VeryHidden ne m'empêche pas de retrouver toutes mes données, sans qu'on me demande de mot de passe ???

    Un grand merci à vous, pour vos différentes méthodes

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

Discussions similaires

  1. Exporer des valeurs dans une fichier fermé.
    Par guigui1976 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/02/2011, 08h31
  2. [VBA] Copier une plage de cellules dans un fichier fermé
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/01/2006, 16h52
  3. Transposer des données sql dans un fichier texte
    Par Anakior dans le forum Outils
    Réponses: 3
    Dernier message: 11/12/2005, 10h01
  4. récupérer des données saisies dans un fichier
    Par natie_49 dans le forum C++
    Réponses: 6
    Dernier message: 24/11/2005, 11h29
  5. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05

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