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.
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
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.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.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 ...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à ouvert
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub Workbook_Open() Application.Run "PERSONAL.xlsb!LAC.updatedata", ThisWorkbook End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager