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