Bonjour.

J'ai lu cette discussion.

Je me permets de poster ici, car de toutes les solutions proposées, c'est certainement la plus légère que j'ai trouvée (Les autres utilisent des boucles, voir 3 fonctions différentes !), et les réponses déjà apportées sont très proches de ce que je recherche.

Moi aussi, je souhaite vérifier l'existence d'une feuille dans un autre classeur ouvert.

Je donne donc toutes les infos :

Je travaille sur un fichier FichierCible.Xlsm.

Quand il s'ouvre, il va copier une plage de cellule d'une feuille d'un autre fichier, dans une plage de cellules d'une de ses propres feuilles.

J'utilise un fichier ini et la fonction lire et écrire dans un fichier ini pour indiquer le fichier source et la feuille à recopier.
Merci Romain Puyfoulhoux
https://vb.developpez.com/faq/?page=Systeme#ini

J'ai ramené cette fonction à INI_READ("Nom du paramètre")

Voilà ce que contiennent ces paramètres :
INI_READ("Ini_Database_Tmp_Path") : C:\Users\MonUser\Downloads\DossierDeTravail
INI_READ("Ini_Xlsm_File_Nm") : FichierAVérifier.Xlsx
INI_READ("Ini_Xlsm_Sheet") : FeuilleAVérifier

Le nom de fichier contient en son début l'ID (un identifiant).

Le nom de la feuille à importer est un nom de mois (mais tous les mois ne sont pas présents dans le fichier source, d'où ma demande).

Il n'est pas possible de se passer de ce fichier ini dans la configuration que j'utilise

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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Option Explicit
Private Sub Workbook_Open()
'Sur ouverture
 
'on vitrifie les cellules cibles
'Merci dubois
Range("F2:R202").Clear
 
'On indique l'ID dans la première cellule
'Merci MarcelG
'https://www.developpez.net/forums/d1421325/logiciels/microsoft-office/excel/macros-vba-excel/ecrire-cellule-partir-d-fonction-vba/
Workbooks("FichierCible.Xlsm ").Worksheets("FeuilleCible").Range("A2").Value = Left(INI_READ("Ini_Xlsm_File_Nm"), InStr(INI_READ("Ini_Xlsm_File_Nm"), "#") - 1)
'Et le mois dans la seconde
Workbooks("FichierCible.xlsm").Worksheets("FeuilleCible").Range("B2").Value = UCase(Left(INI_READ("Ini_Xlsm_Sheet"), 1)) & LCase(Mid(INI_READ("Ini_Xlsm_Sheet"), 2))
 
'On recopie les cellules d'origine
 
'Les variables
Dim Wrkbks_Nm, Wrkshts_Nm, Wrkbks_Fl_Path As String
'Leurs valeurs
Wrkbks_Fl_Path = INI_READ("Ini_Database_Tmp_Path") & "\" & INI_READ("Ini_Xlsm_File_Nm")
Wrkbks_Nm = INI_READ("Ini_Xlsm_File_Nm")
Wrkshts_Nm = INI_READ("Ini_Xlsm_Sheet")
 
'Merci galopin01
'http://forum.ruemontgallet.com/ruemontgallet/Programmation/vb-vba/comment-fichier-excel-sujet_23042_1.htm
'Merci Banzai64
 
'Workbooks("FichierCible.xlsm").Worksheets("FeuilleCible").Cells.ClearContents   'Pour supprimer tout le contenu de la feuille cible !
Workbooks.Open Filename:=Wrkbks_Fl_Path
 
"########## Ici devrait se trouver la procédure de test pour vérifier l'existence de la feuille visée."
 
Workbooks(Wrkbks_Nm).Worksheets(Wrkshts_Nm).Range("A10:M210").Copy _
Workbooks("FichierCible.xlsm").Worksheets("FeuilleCible").Range("F2:R202")
Workbooks(Wrkbks_Nm).Close False
 
'On enregistre tout
'Merci Idoine
Dim wb As Workbook
For Each wb In Workbooks 'boucle sur tous les classeurs ouverts
wb.Close True 'fermeture du classeur avec sauvegarde
Next
'On change un paramètre dans le fichier ini :
INI_WRT "Ini_Xlsm_Wait", "GO"
 
'On ferme
'Application.Quit
 
End Sub
Et voilà.

Tout comme raymoundo, je souhaiterais écrire quelque chose du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
If FeuilleExiste(LeWorkBookDeMonChoix, "feuil1") Then
Et donc j'ai écrit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
If FeuilleExiste(Wrkbks_Nm, Wrkshts_Nm) Then
Erreur :
Wrkbks_Nm surligné en bleu, erreur de compilation : Type d'argument Byref incompatible

J'ai tenté :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
If FeuilleExiste(Wrkbks_Fl_Path, Wrkshts_Nm) Then
Erreur :
Wrkbks_Fl_Path surligné en bleu, erreur de compilation : Type d'argument Byref incompatible

Je ne dois pas le faire comme il faut…

D'avance merci.