Bonjour Jean-Philippe,
En théorie oui il est mon classeur actif mais non étant donné que le code est dans personal.xlsb ... il pense que le activeworkbook ou le thisworkbook est le personal.xlsb
Fais abtraction pour l'instant de tes personal.xlsb.
Comment est-il possible de déterminer avec une certitude absolue sur quel classeur pointer ? Ne peux-tu anticiper son ouverture par ailleurs ? Tu dois avoir un moyen de déterminer à un moment de toutes tes étapes avec certitude ton classeur.
Re SAlut :)
ok donc a son ouverture, c'est a seulement cette endroit/instant que je sais a quelle endroit où il se trouve et qu'elle est son nom le workbook a et ce avec certitude, autrement ces impossibles.Citation:
Comment est-il possible de déterminer avec une certitude absolue sur quel classeur pointer ?
Il faudrait dire que thisworkbook ou activeworkbook (car c'Est celui qui est disponible à ce moment là), donne le nom a une constante et que cette constante est transposé dans l'autre sub.
Je peux faire comme j'ai tenté ie de faire un paramètre. À ce moment là ... ça va marché pour la mise a jour lors de l'ouverture mais je vais manqué le paramètre lors de l'exécution avec un bouton.
Donc 2 possibilité s'offre a moi afin que ca fonctionne. Faire deux macros, une pour l'ouverture et une autre pour la mise a jour en cours de traitment. L'autre solution serais d'etre en mesure de définir le parametre automatiquement lors de l'Exécution en cours de traitement ... ce que je ne sais pas logiquement comment faire. Je pense a faire un code qui m'amenerais a un autre code afin de détourner le personal.xlsb mais c'est hypothétique la réussite ... il est sur que je vais le testé. Donc mon bouton va pointeé sur une sub qui va toujours définir le meme parametre de la sub similaire à celle de mon ouverture de fichier. Cette sub serais alors local et non mise a jour via mon personal.xlsb
Par en cours de traitement dans les exemples plus haut, je veux dire, que j'ai mon fichier lexique ouvert, je fais des changements a l'intérieur de l'onglet data et je veux mettre a jour le fichier de travail avec l'onglet data du lexique. Donc au lien de détruire l'onglet data du fichier en cours et copier celle du fichier lexique, j'utilise cette même sub afin de me facilité la tâche.
Pour l'anticipation par ailleurs, je ne vois pas autrement que updatedata avec paramètre du nom du fichier qui est ouvert. Donc je dois avoir un autre sub local qui parametre mon updatedata.Citation:
Ne peux-tu anticiper son ouverture par ailleurs ?
Effectivement que je dois déterminé dans tous les étapes avec certitudes le nom du classeur. Donc étant donné que j'ai seulement cette certitude lors du départ, je retourne avec la meme idée que Philippe m'a enligné ie un parametrage ...Citation:
Tu dois avoir un moyen de déterminer à un moment de toutes tes étapes avec certitude ton classeur.
donc je vais testé une nouvelle procédure d'appelle d'en cours de procédure et théoriquement tous serais supposé d'être en ordre (selon mais connaissance et mon anticipation)
Mon test semble bon pour marché avec un autre intermédiaire cependant étant donné que l'on set .open ... mon code ne fonctione pas bien. Par défaut lorsqu'il "set" le parametre avec la méthode open, le fichier s'ouvre donc il ne fermera pas comme demandé ...
je devrais alors enlever le set et remplacer par autre chose qui n'interviens pas avec le reste de mon code
Voici donc mon code finale avec mes deux appels :
ouverture de fichier
sub lorsque mon fichier est déjà ouvertCode:
1
2
3
4 Private Sub Workbook_Open() Application.Run "PERSONAL.xlsb!LAC.updatedata", ThisWorkbook End Sub
Code:
1
2
3 Sub updatedata_fichier() Application.Run "PERSONAL.xlsb!LAC.updatedata", ThisWorkbook End Sub
Voici le code finale situé dans mon personal.xlsb
Code:
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 Sub updatedata(quoi_MAJ As Workbook) Dim nom_lexique As String Dim chemin_lexique As String chemin_lexique = "\\emplacement réseau\lexique des abréviations.xlsm" nom_lexique = "lexique des abréviations.xlsm" Application.ScreenUpdating = False quoi_MAJ.Activate 'Si data exist comme onglet, on le détruit If sheetExists("data") Then Application.DisplayAlerts = False quoi_MAJ.Sheets("data").Delete Application.DisplayAlerts = True End If 'Si le lexique est déjà ouvert le choisir et copier l'onglet data If IsFileOpen(chemin_lexique) Then Workbooks(chemin_lexique).Sheets("data").Copy After:=quoi_MAJ.Sheets(3) quoi_MAJ.Sheets("Travail").Select Else 'Si le lexique n'Est pas ouvert, l'ouvrir, copier data et le fermer Workbooks.Open chemin_lexique Workbooks(nom_lexique).Sheets("data").Copy After:=quoi_MAJ.Sheets(3) quoi_MAJ.Sheets("Travail").Select Workbooks(nom_lexique).Close End If End Sub
Merci beaucoup pour votre aide ... particulièrement, Jean-Philippe et Philippe.
J'ai finalement trouvé une solution viable et appris de ce même pas.
amicalement jpvba ;)
Cool,
pour peaufiner, tu peux transformer ceci :
en cela :Code:
1
2
3
4 Workbooks.Open chemin_lexique Workbooks(nom_lexique).Sheets("data").Copy After:=quoi_MAJ.Sheets(3) quoi_MAJ.Sheets("Travail").Select Workbooks(nom_lexique).Close
Code:
1
2
3
4
5 Dim wbk_Lexique as Workbook Set wbk_Lexique = Workbooks.Open (chemin_lexique) wbk_Lexique Sheets("data").Copy After:=quoi_MAJ.Sheets(3) quoi_MAJ.Sheets("Travail").Select wbk_Lexique .Close
Bonjour Jean-Philippe super !!!
Mais je croyais que si on ajoute des variable, on alourdissait une sub et non l'allégé.
Suis-je dans les patates (on dirais une annonce de yum yum)
Personnellement, je trouve bien plus lisible ceci :
que cela :Code:
1
2
3
4
5 Dim wbk_Lexique as Workbook Set wbk_Lexique = Workbooks.Open (chemin_lexique) wbk_Lexique.Sheets("data").Copy After:=quoi_MAJ.Sheets(3) quoi_MAJ.Sheets("Travail").Select wbk_Lexique.Close
Code:
1
2
3
4 Workbooks.Open (chemin_lexique) Workbooks(chemin_lexique).Sheets("data").Copy After:=quoi_MAJ.Sheets(3) quoi_MAJ.Sheets("Travail").Select workbooks(chemin_lexique).Close