Oui je vais essayer de comprendre, j'ai parcouru rapidement, je vais y revenir
Mais pourquoi parle-t-on de paramètre batch ?
Oui je vais essayer de comprendre, j'ai parcouru rapidement, je vais y revenir
Mais pourquoi parle-t-on de paramètre batch ?
Il ne savait pas que c'était impossible, donc il l' a fait...
Je me suis basé sur ta phrase
Pour optimiser je me demande si je peux ouvrir ce classeur "C" en passant un paramètre et tester ce paramètre dans Private Sub Workbook_Open() pour sauter le traitement "T"
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
J'ai tout lu de cette discussion.
Je n'y vois rien qui exprime clairement quand et dans quelles circonstances , très exactement, il faut inhiber certaines instructions.
Je suis prêt à parier que cette précision est indispensable et qu'elle est dans le même temps le fil conducteur d'une stratégie.
J'attends ...
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
En passant par GetCmd, oui, après c'est de la manipulation de chaîne de caractères
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
Salut.
A la place de Workbook_Open, tu peux utiliser Auto_Open (à placer dans un module standard).
- Workbook_Open s'exécute AVANT Auto_Open;
- Auto_Open ne s'exécute pas si le classeur est ouvert par macro.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
re
je me suis un peu amusé avec le clipboard
classeur lanceur
classeur 2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Sub test() Dim chemin$, mesparametres$, CSV_STRING$ chemin = ThisWorkbook.Path & "\classeur2.xlsm" mesparametres = "toto,titi,tata,riri,fifi" Range("A1:C5").Copy With CreateObject("htmlfile") CSV_STRING = Replace(.parentwindow.clipboardData.GetData("Text"), vbTab, ";")'récup de la plage copiée en format text séparateur ";" x = .parentwindow.clipboardData.clearData("Text")'vide le cliboard x = .parentwindow.clipboardData.setData("Text", mesparametres & vbCrLf & "," & CSV_STRING)'rempli le clipboard End With Workbooks.Open chemin'ouvre le classeur2 End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub Workbook_Open() mesparametres = CreateObject("htmlfile").parentwindow.clipboardData.GetData("TEXT")'récup de tout les parametre MsgBox mesparametres'affichage resultat End Sub
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
post #23
en effet je dois préciser le besoin.
A l'open d'un classeur j'ai un traitement qui prends un peu de temps, le classeur grossit et il a actuellement 2000 lignes, le traitement à l'open : renumérotaion, tri, ect...
Mais ce classeur peut aussi être ouvert par d'autres classeurs pour juste l'ajout de lignes à la fin, sans besoin immédiat de renumérotation, de tri, ect.. puis fermé par l'appelant
Aussi je me suis dit qu'il serait préférable dans ces cas d'ouvrir le classeur en occultant le traitement de "Private Sub Workbook_Open()"
tout simplement
Il ne savait pas que c'était impossible, donc il l' a fait...
=> auto_open
J'en profite pour préciser que normalement, tu ne devrais pas avoir du code applicatif dans ton Workbook_Open ou dans ton Auto_Open. Ces procédures devraient se contenter d'appeler des procédures placées ailleurs, ce qui permettrait de moduler facilement ce que chacune doit réaliser (pour coller à ta demande initiale qui est de ne pas exécuter tout le Workbook_Open.
Ainsi, tes procédures de tri ne devraient pas être dans le code de Workbook_Open, mais appelées par le code.
et ailleurs dans un module standard
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Sub Workbook_Open() Tri1 Tri2 Tri3 End Sub
Ainsi, si tu souhaites que Tri1 et Tri2 soient appelées quel que soit le mode d'ouverture, Tri3 ne devant être appelée que sur ouverture manuelle, tu auras:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Sub Tri1() ... ... End Sub Sub Tri2() ... ... End Sub Sub Tri3() ... ... End Sub
dans le Workbook_Open
et dans un module standard
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Sub Workbook_Open() Tri1 Tri2 End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Sub Auto_Open() Tri3 End Sub
Si tu veux que rien se soit exécuté lors de l'ouverture par macro, il te suffit de mettre tous tes appels dans Auto_Open et de supprimer l'écoute de l'événement Workbook_Open en supprimant simplement la procédure.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Sub Auto_Open() Tri1 Tri2 Tri3 End Sub
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Je mets ici deux fichiers: Launcher et Auto_Open
Place-les dans un même dossier puis observe ce qui se passe:
1. Ouvre Auto_Open.xslm => Tu verras que les trois tris sont réalisés dans l'ordre 1, 2, 3.
2. Ferme Auto_Open, puis ouvre Launcher.xslm. Clique sur le bouton pour ouvrir Auto_Open.xlsm. Tu verras que seuls les tris 1 et 2 sont réalisés.
=> Les procédures qui ne doivent pas être exécutées lors d'une ouverture par macro doivent donc être appelées par Auto_Open. En cas d'ouverture manuelle, les procédures appelées par Auto_Open seront appelées après celles appelées par Workbook_Open.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
GRAND MERCI c'est très clair et j'ignorai cela, comme beaucoup surement, très instructif
Je vais revoir ensuite mes classeurs pour tenir de ta remarque aussi (pas de code direct dans le code applicatif dans mes Workbook_Open)
Une question :
comment faire pour que tri1 et tri2 soient appelés à l'ouverture du fichier lorsque l'open est fait par une macro dans un classeur A et qu'aucun des 2 tris ne soient faits à l'ouverture du fichier lorsque l'open est fait par une macro dans un classeur B
Il ne savait pas que c'était impossible, donc il l' a fait...
re
bonjour retraité
comment faire pour que tri1 et tri2 soient appelés à l'ouverture du fichier lorsque l'open est fait par une macro dans un classeur A et qu'aucun des 2 tris ne soient faits à l'ouverture du fichier lorsque l'open est fait par une macro dans un classeur B
on retombe dans ce qui a été dit avant a savoir :qu'il faut pointer d'une manière ou d'une autre dans le fichier auto_open le fichier qu'il la lancé
dans ce cas là la solution du bath qui t'a été donné est toute indiquée ...ou... pointer sur la caption le nom du launcher comme je te l'ai indiqué
moi aussi je l'ignorais complètement ce "sub auto_open "
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Bonjour à vous,
Hé salut Pierre, cela faisait longtemps...
Je respecte bien entendu les propositions précédentes.
Mon idée était la suivante et c'est celle que j'affecte à mes développements où je privilégie l'appel de procédure(s)
Si dans le classeur appelé l'évènement Open est composé d'appels de procédure.
Alors dans le classeur appelant, il peut être codé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub Workbook_Open() Call lamacro1 Call lamacro2 End Sub
A la syntaxe près (Voir la discussion que j'ai indiquée)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Application.EnableEvents = False Workbooks.Open Filename:="leclasseur appelé" Application.Run "leclasseurappelé!la macro2" Application.EnableEvents = True
A mon humble avis, c'est un processus facile à coder et d'une certaine souplesse.
Bien Cordialement.
Marcel
Dernier billet:
Suppression des doublons d'un tableau structuré, gestion d'un array
Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.
Bonjour,
Par acquis de conscience j'ai testé la proposition de MarcelG du post #2, ça fonctionne comme prévu :
Workbook_Open() n'est pas exécuté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Application.EnableEvents = False Workbooks.Open "D:\tmp\Classeur1.xlsm" Application.EnableEvents = True
eric
re
bonjour marcel
je rajoute a ton idée la condition que retraité souhaite
dans le fichier qui est sensé être ouvert par les un et les autre
et dans les launchers
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Option Explicit 'plus rien dans le workbook_open Sub Auto_Open() MsgBox "ouvert tout seul" 'lancer ici les sub qui doivent etre lancée quand il est ouvert manuellement(tout seul) End Sub Sub OpenByautherFich(argmt) MsgBox "ouvert par !!:" & argmt 'lancer ici les sub qui doivent etre lancé en fonction du nom du classeur qui aété injecté End Sub ' test autre macros ici
le classeur qui a ouvert le auto_open est identifié dans le auto_open
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Option Explicit Sub OpenTarget() Application.EnableEvents = False Workbooks.Open Filename:="C:\Users\polux\DeskTop\Auto_Open.xlsm" Application.Run "'Auto_Open.xlsm'!OpenByautherFich", ThisWorkbook.Name Application.EnableEvents = True End Sub
parti de la retraité tu a tout ce que tu voulais
et effectivement plus de workbook_open comme a dit pierre
pour info
bien mettre les simple cotes ci dessous en rouge
application.run "'nomduclasseur'! nomdelamacro",argument1,argument2,argument3,'etc........
edit :
suis je bête!!!! même plus besoins d'inhiber les events puisque plus de workbook_open et la sub auto-open ne se déclenche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Sub OpenTarget() Workbooks.Open Filename:="C:\Users\polux\DeskTop\Auto_Open.xlsm" Application.Run "'Auto_Open.xlsm'!OpenByautherFich", ThisWorkbook.Name End Sub
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
post#35
c'est ok !! après pas mal de tentatives
post#20
je n'ai pas pu aller au bout, au dessus de mes connaissances..
Merci à tous
Il ne savait pas que c'était impossible, donc il l' a fait...
J'ai crié victoire un peu vite:
voilà l'auto_open du classeur
tout va bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Option Explicit Sub Auto_Open() MsgBox "ouvert tout seul" End Sub
voilà l'ouverture par un autre classeur:
mais je n'arrive pas jusque là, dans le lanceur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Sub OpenSF() MsgBox "ouvert par autre classeur" End sub
sur Application.autorun j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub test() Dim pathSF As String pathSF = "K:\ES-SIG\SF.xlsm" Workbooks.Open Filename:=pathSF Application.Run "'SF.xlsm'!OpenSF", ThisWorkbook.Name End Sub
le lanceur est sur C: et le fichier à ouvrir sur K:erreur '450' nombre d'arguments incorrect ou affectation de priorité incorrecte
je ne saisi pas le système passage et récupération de l'argument
Il ne savait pas que c'était impossible, donc il l' a fait...
Bonjour,
j'ai 5 classeurs qui sont susceptibles d'ouvrir le classeur cible
Il ne savait pas que c'était impossible, donc il l' a fait...
je vais regarder j'ai un disk "K" justement
aben non pas la peine !!!!!!!!!!!!!!!!!
ET L'ARGUMENT ENTRE PARENTESES DANS LA SUB OPENSF ALORS TU L'A MANGE !!!!!!!!!!!!!
ma fois stu lance une sub avec argument faut il encore que celle si en ai
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 sub openSF(ARGUMENT) '..... end sub
le lanceur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Sub OpenSF(argument as string ) MsgBox "ouvert par autre classeur par " & argument End sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 sub je_lance() Dim pathSF As String pathSF = "K:\ES-SIG\SF.xlsm" Workbooks.Open Filename:=pathSF Application.Run "'SF.xlsm'!OpenSF", ThisWorkbook.Name End Sub
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
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