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 :

activer un classeur ouvert sans connaitre son nom


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 35
    Points : 19
    Points
    19
    Par défaut activer un classeur ouvert sans connaitre son nom
    Bonjour,

    Dans ma macro, je souhaiterai activer un classeur qui serait déjà ouvert par l'utilisateur afin d'y ajouter des informations complémentaires dans une cellule. Le seul hic, c'est que ce classeur, bien qu'ayant les mêmes onglets et informations se nomme différement pour chaque personne.

    Est-ce qu'une fonction du genre: Windows(*jesaispasquoi*.xls).activate existerait ?

    Quelqu'un a-t-il une solution pour m'aider.

    Merci

  2. #2
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    dans la collection Workbooks, tu trouveras tous les classeurs ouverts dans cette instance d'excel.

    Au delà de ça, bonne chance pour trouver celui que tu cherches.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    For Each wb In Workbooks
     Debug.Print wb.Name
    Next
    End Sub

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 35
    Points : 19
    Points
    19
    Par défaut
    Merci Godzestla pour ta réponse,

    Donc, imaginons que je n'aie que celui qui execute la macro et celui qui doit recevoir les modifications, ça devrait le faire. Plus qu'à mettre le premier nom trouvé en variable et j'aurai ma solution...

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Oui,

    dans ce cas de figure, si le nom est <> de Thisworkbook.name, alors tu as ce que tu cherches.

    Mais attention au add-ins (XLA et XLS) ouverts par défaut.

    Mieux vaux tester avant pour être bien certain qu'il n'y a pas d'autres classeurs ouverts.

    Tu peux aussi filtrer sur le chemin du classeur en utilisant .Fullname.

    Bonne chance.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 35
    Points : 19
    Points
    19
    Par défaut


    Merci pour l'aide... j'ai trouvé ce que je cherchai... et tout fonctionne...

    Nickel

    Pour info (si cela peut être utile à qqun)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim WB As String
    If Workbooks.Count = 2 Then
    For i = 1 To 2
    If Not Workbooks(i).Name = ThisWorkbook.Name Then WB = Workbooks(i).Name
    Next i

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    J'aime mieux comme ceci, perso :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim WB As String
    If Workbooks.Count = 2 Then
    For i = 1 To 2
    If Workbooks(i).Name <> ThisWorkbook.Name Then WB = Workbooks(i).Name
    Next i

  7. #7
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Bonjour,

    Juste pour donner la solution que j'utilise pour pas m'embêter avec les XLA et autres que Godzestla indique.
    L'idée, j'affecte à une variable le fichier en cours (donc celui avec la macro) ensuite avec le Getopenfilename, l'utilisateur ouvre le fichier voulu et devient donc le Workbook actif qu'on peut donc aussi affecter à une variable, et voilà...

    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
    Sub BonFichier()
    Dim WkbS As Workbook, WkbC As Workbook
    Dim LeFichier As String
     
    Set WkbS = ThisWorkbook 'Affecte à WkbS (source) le fichier actif, qui contient la macro
     
    LeFichier = Application.GetOpenFilename("Fichier Excel (*.xls*), *.xls*")
    If LeFichier <> "False" Then
        Application.Workbooks.Open LeFichier
        Set WkbC = ActiveWorkbook 'Affecte la variable ou fichier qui vient d'être ouvert, donc de l'utilisateur
    End If
     
    'A partir d'ici tu peux utiliser les variables WkbS et WkbC
     
    End Sub
    A+

  8. #8
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Chouette technique Frédéric.
    je prend note.

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bonjour

    sans vouloir offensé qui que que ce soit

    puisque la condition est "If Workbooks.Count = 2" et puisque que i tombe forcement a deux puisque le 1 est forcement celui que l'on a sous les yeux
    donc le bon c'est forcement le 2eme mais que ce passe t_il si il y en a plus de deux et que le bon et le 4 ou 5 ou 3eme ta boucle te sort de la sub tout simplement
    enfin si c'est que pour 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim WB As String
    If Workbooks.Count = 2 Then
    WB = Workbooks(2).Name
    si j'ai bien compris ce fichier est utilisé par plusieurs personne et celles ci l'enregistre a leur bon vouloir en ce qui concerne le nom
    pourquoi ne pas supprimer la possibilité de l'enregistrer manuellement
    et ajouter un bouton quelque part et sur ce bouton une macro qui l'enregistre toujours avec le même nom et au même endroit
    ainsi le nom est connu bien avant ta macro

    enfin moi ce que j'en dis
    edit:
    la proposition de fvandermeulen et la plus probante amon avis bien que
    a la place des variables wkbs et wkbc j'utilisiserai plutot la concatenation de deux variable

    dim wkbs () as object
    dim numero as long

    a chaque open numero=numero+1
    workbooks.open "ton fichier"
    wkbs(numero)= activeworkbook.name

    'ainsi tu peut en ouvrir autant que ton pc pourra le supporter





    au plaisir

  10. #10
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut Patrick,

    Verifie ceci
    puisque la condition est "If Workbooks.Count = 2" et puisque que i tombe forcement a deux puisque le 1 est forcement celui que l'on a sous les yeux
    Tu te trompes. Le 1 c'est le premier ouvert !!

  11. #11
    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
    Bonjour à tous
    Je me mêle aussi
    LeFichier est déclaré en variant (sinon pour moi, quand l'utilisateur annule la sélection du fichier, LeFichier est à Faux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub BonFichier()
    Dim WkbS As Workbook, WkbC As Workbook
    Dim LeFichier As Variant
     
    Set WkbS = ThisWorkbook                                              'Affecte à WkbS (source) le fichier actif, qui contient la macro
     
    LeFichier = Application.GetOpenFilename("Fichier Excel (*.xls*), *.xls*")
    If LeFichier <> False Then
        Set WkbC = Workbooks.Open(LeFichier)                             'Affecte la variable ou fichier qui vient d'être ouvert, donc de l'utilisateur
    'Suite
    'A partir d'ici tu peux utiliser les variables WkbS et WkbC
    End If
    End Sub

  12. #12
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Bonjour à tous
    Je me mêle aussi
    LeFichier est déclaré en variant (sinon pour moi, quand l'utilisateur annule la sélection du fichier, LeFichier est à Faux
    Quand tu dis est à Faux, il renvoi "Faux" et pas "False", c'est donc encore une question de langue (je suis en anglais donc pas de souci), si c'est bien ça tu as tout à fait raison, le variant se plus "tranportable"

    A+

  13. #13
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Frédéric.

    Attention, dans ton code tu as mis ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LeFichier <> "False" Then
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LeFichier <> False Then
    je suppose que c'est cela que mercatog à voulu mentionner.

  14. #14
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    Frédéric.

    Attention, dans ton code tu as mis ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LeFichier <> "False" Then
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LeFichier <> False Then
    je suppose que c'est cela que mercatog à voulu mentionner.
    Pourtant "False" fonctionne, je viens de réessayer car vous m'aviez mis le doute.
    En fait les deux fonctionnent, même en String, reste à voir si la langue influence le retour avec la variable en string (Mercatog ?)

    Edit:
    P.S. C'est juste pour savoir, car je suis d'accord que Variant est mieux

  15. #15
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Frédéric,

    Pourtant "False" fonctionne, je viens de réessayer car vous m'aviez mis le doute.
    mais pas en changeant de langue, donc à éviter absolument je pense.

  16. #16
    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
    J'ai Excel Français, je confirme que déclarée en String, LeFichier retourne "Faux"

  17. #17
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Donc nous sommes tous bien d'accord, si la variable sous String renvoi des valeurs différentes en fonction de la langue, c'est à EVITER ABSOLUMENT

    A+

  18. #18
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation Envoyé par Fvandermeulen Voir le message
    Donc nous sommes tous bien d'accord, si la variable sous String renvoi des valeurs différentes en fonction de la langue, c'est à EVITER ABSOLUMENT

    A+
    Ainsi que cette formulation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If LeFichier <> "False" Then

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

Discussions similaires

  1. Activer un classeur ouvert sans connaitre son nom
    Par djjilou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/04/2012, 18h47
  2. supprimer un raccourci sans connaitre son nom !
    Par MIKKA dans le forum Windows
    Réponses: 4
    Dernier message: 26/02/2009, 18h01
  3. Instancier une classe sans connaitre son nom
    Par Molkobain dans le forum Langage
    Réponses: 8
    Dernier message: 16/02/2009, 15h49
  4. modifier une propriété sans connaitre son nom
    Par cyberchand dans le forum C#
    Réponses: 2
    Dernier message: 17/04/2007, 17h17
  5. Comment ouvrir un fichier sans connaitre son nom
    Par APoLLoN1234 dans le forum C++
    Réponses: 8
    Dernier message: 10/09/2006, 19h04

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