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

Fermé
HELMUT94 Messages postés 25 Date d'inscription samedi 8 août 2009 Statut Membre Dernière intervention 21 mars 2019 - 21 mars 2019 à 11:58
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 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

3 réponses

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
21 mars 2019 à 13:37
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+
0
HELMUT94 Messages postés 25 Date d'inscription samedi 8 août 2009 Statut Membre Dernière intervention 21 mars 2019 1
21 mars 2019 à 14:30
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 ?
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié le 22 mars 2019 à 00:15
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.


0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
21 mars 2019 à 14:14
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

-1
HELMUT94 Messages postés 25 Date d'inscription samedi 8 août 2009 Statut Membre Dernière intervention 21 mars 2019 1
21 mars 2019 à 14:29
les pros... parce que là par exemple je ne comprends ni ta réponse ni celle de Zoul67
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
21 mars 2019 à 15:28
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)
-1
HELMUT94 Messages postés 25 Date d'inscription samedi 8 août 2009 Statut Membre Dernière intervention 21 mars 2019 1
21 mars 2019 à 15:49
thanks, je vais regarder
0