VBA : faire référence à un autre classeur sans le nommer

Messages postés
25
Date d'inscription
samedi 8 août 2009
Statut
Membre
Dernière intervention
21 mars 2019
- - Dernière réponse : eriiic
Messages postés
22851
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 août 2019
- 22 mars 2019 à 00:11
Bonjour les pros de VBA,

j'ai deux classeurs ouverts, dans ma macro je veux déplacer la feuille de l'un vers l'autre : facile

par contre mes classeurs ne s'appelleront pas toujours pareil, comment je fais pour que la macro fonctionne avec n'importe quel classeur

je sais qu'il y a la notion ActiveWorkbook qui désigne le classeur dans lequel je suis mais comment désigner le second classeur sans le nommer puisque son nom sera différent à la prochaine utilisation de macro?

par quoi remplacer "Workbooks("RequeteGlobalePlatXLS.xls")" ?



Sub test()
'
' test Macro
'

'
Sheets("AffectationListXLS").Select
Sheets("AffectationListXLS").Move After:=Workbooks( _
"RequeteGlobalePlatXLS.xls").Sheets(1)
Windows("Classeur4").Activate
End Sub



Configuration: Windows / Chrome 73.0.3683.86
Afficher la suite 

3 réponses

Messages postés
1914
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
7 août 2019
120
0
Merci
Bonjour,

C'est un peu risqué, mais tu peux déterminer tous les classeurs VBA ouverts et comparer leur nom.
Un exemple :
Sub essai()
    MsgBox ActiveWorkbook.FullName
    For Each fichier_excel In Workbooks
        MsgBox fichier_excel.FullName
    Next fichier_excel
End Sub


Et tu ajoutes une comparaison.

A+
HELMUT94
Messages postés
25
Date d'inscription
samedi 8 août 2009
Statut
Membre
Dernière intervention
21 mars 2019
1 -
Merci
risqué par rapport à quoi ?

je ne sais pas ajouter une comparaison

donc si je mets "fullname" à la place du nom du fichier, ça marche ?
Commenter la réponse de Zoul67
Messages postés
15905
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
17 août 2019
2780
0
Merci
Bonjour,

Pourquoi "les pros" ? cest ridicule...
Dim fichier As String

ChDir "D:\docus\excel\essai" ' à adapter
fichier = Application.GetOpenFilename("Fichiers xlsx,*.xlsx")
Workbooks.Open Filename:=fichier

HELMUT94
Messages postés
25
Date d'inscription
samedi 8 août 2009
Statut
Membre
Dernière intervention
21 mars 2019
1 -
les pros... parce que là par exemple je ne comprends ni ta réponse ni celle de Zoul67
michel_m
Messages postés
15905
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
17 août 2019
2780 -
pourtant, il n'y a pas besoin de "pros" pour résoudre un tel problème

pour apprendre le vba
https://excel.developpez.com/cours/?page=prog#environnement
et aussi, très pédagogique et zen (mon préféré pour les bases)
http://www.info-3000.com/vbvba/index.php

bonne découverte :o)
HELMUT94
Messages postés
25
Date d'inscription
samedi 8 août 2009
Statut
Membre
Dernière intervention
21 mars 2019
1 -
thanks, je vais regarder
Commenter la réponse de michel_m
Messages postés
22851
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 août 2019
5597
0
Merci
Bonjour à tous,

s'assure qu'il n'y a que 2 classeurs d'ouverts sinon éjection :
Sub deplFeuil()
    Dim wb2 As Workbook
    If Workbooks.Count <> 2 Then MsgBox "Il faut 2 classeurs": Exit Sub
    For Each wb2 In Workbooks
        If wb2.Name <> ThisWorkbook.Name Then Exit For
    Next
    ThisWorkbook.Sheets("AffectationListXLS").Move After:=wb2.Sheets(1)
    ThisWorkbook.Activate
End Sub

eric

PS : copie toujours du classeur de la macro vers l'autre, qq soit l'actif.


En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Commenter la réponse de eriiic