Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1544 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro qui s'exécute sur Personal.xlsb

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Macro qui s'exécute sur Personal.xlsb

n°2413354
scaryfan
Apple Inside
Posté le 28-03-2022 à 16:42:49  profilanswer
 

Salut,
 
J'ai un souci avec une macro que j'ai installée chez un collègue.
 
Tous les matins, j'ouvre un fichier XLSX que je reçois par mail : "Trucmachin.xlsx"
Ensuite, j'exécute une macro qui est enregistrée dans un module du fichier PERSONAL.XLSB.
La macro met en forme le fichier Trucmachin.xlsx et le découpe ensuite en plusieurs fichiers A.xlsx, B.xslx, C.xlsx... etc.
 
Chez mon collègue, la macro s'exécute mais sur le fichier PERSONAL.xlsb...  :??:  au lieu du fichier Trucmachin.xlsx...  :fou:  
 
Quel est le problème ?
 
Je précise bien que chez moi, la macro s'exécute bien sur le fichier "Trucmachin.xlsx"...
 
Merci pour vos retours.
 
scaryfan


Message édité par scaryfan le 28-03-2022 à 16:52:36

---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
mood
Publicité
Posté le 28-03-2022 à 16:42:49  profilanswer
 

n°2413392
MaybeEijOr​Not
but someone at least
Posté le 28-03-2022 à 23:12:23  profilanswer
 

Salut,
 
As-tu bien précisé les noms des classeurs dans la macro ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2413408
scaryfan
Apple Inside
Posté le 29-03-2022 à 08:54:07  profilanswer
 

MaybeEijOrNot a écrit :

Salut,
 
As-tu bien précisé les noms des classeurs dans la macro ?


 
Bah non justement, le but étant que la macro s'exécute sur le fichier ouvert... quelque soit le nom...
Un jour, cela peut être "Trucmachin001.xlsx", un autre jour "Trucmachin003.xlsx"...
 
Sachant que chaque matin, ce fameux fichier a toujours la même structure... (heureusement d'ailleurs  :pt1cable: )


Message édité par scaryfan le 29-03-2022 à 08:55:12

---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2413429
MaybeEijOr​Not
but someone at least
Posté le 29-03-2022 à 10:33:45  profilanswer
 

Oui mais comme tu le peux constater c'est forcément bancal de lancer une macro sans préciser où elle doit s'exécuter.
 
Avec l'objet Workbooks tu peux accéder aux différents classeurs ouverts, tu peux peut-être commencer par indiquer dans ta macro qu'elle doit s'exécuter dans le premier classeur dont le nom se termine par .xlsx ou du moins pas par .xlsb.
Après c'est à toi de voir quel motif est le plus approprié, parce qu'un classeur nommé "TrucmachinXXX.xlsx" ce n'est pas très compliqué à identifier.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2413435
scaryfan
Apple Inside
Posté le 29-03-2022 à 10:43:02  profilanswer
 

MaybeEijOrNot a écrit :

Oui mais comme tu le peux constater c'est forcément bancal de lancer une macro sans préciser où elle doit s'exécuter.
 
Avec l'objet Workbooks tu peux accéder aux différents classeurs ouverts, tu peux peut-être commencer par indiquer dans ta macro qu'elle doit s'exécuter dans le premier classeur dont le nom se termine par .xlsx ou du moins pas par .xlsb.
Après c'est à toi de voir quel motif est le plus approprié, parce qu'un classeur nommé "TrucmachinXXX.xlsx" ce n'est pas très compliqué à identifier.


 
Merci MaybeEijOrNot pour ta réponse.
 
Comment fais-je pour sélectionner le premier classeur dont l'extension se termine par ".xlsx" ?
 
Workbooks(*&".xlsx" ).Activate ?
 
 :hello:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2413436
scaryfan
Apple Inside
Posté le 29-03-2022 à 10:44:59  profilanswer
 

:??:  
 
Et puis, je le réécris : la macro fonctionne correctement sur mon PC mais pas chez mon collègue...
 
:??:


Message édité par scaryfan le 29-03-2022 à 10:45:12

---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2413447
MaybeEijOr​Not
but someone at least
Posté le 29-03-2022 à 11:26:08  profilanswer
 

Non il faut parcourir les différentes occurrences de Workbooks en bouclant dessus puis vérifier le nom à chaque fois grâce aux fonctions de manipulation des chaînes de caractères.
En fonction du motif à détecter, tu as des fonctions plus ou moins appropriées : https://silkyroad.developpez.com/VB [...] aracteres/
 
Ex :

Code :
  1. For Each Wbk In Workbooks
  2.     cName = Wbk.Name
  3.     cName = Left(cName, Len(cName) - 1)
  4.     If cName = "Classeur" Then
  5.         Exit For
  6.     End If
  7. Next
  8. With Wbk
  9.     MsgBox (Wbk.Name)
  10. End With


 
Après je suis parti du fait que tu as dit que la macro s’exécutait chez ton collègue dans le mauvais classeur, mais peut-être qu'un paramètre de sécurité l'empêche tout simplement de s’exécuter.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2413451
scaryfan
Apple Inside
Posté le 29-03-2022 à 11:36:09  profilanswer
 

MaybeEijOrNot a écrit :

Non il faut parcourir les différentes occurrences de Workbooks en bouclant dessus puis vérifier le nom à chaque fois grâce aux fonctions de manipulation des chaînes de caractères.
En fonction du motif à détecter, tu as des fonctions plus ou moins appropriées : https://silkyroad.developpez.com/VB [...] aracteres/
 
Ex :

Code :
  1. For Each Wbk In Workbooks
  2.     cName = Wbk.Name
  3.     cName = Left(cName, Len(cName) - 1)
  4.     If cName = "Classeur" Then
  5.         Exit For
  6.     End If
  7. Next
  8. With Wbk
  9.     MsgBox (Wbk.Name)
  10. End With


 
Après je suis parti du fait que tu as dit que la macro s’exécutait chez ton collègue dans le mauvais classeur, mais peut-être qu'un paramètre de sécurité l'empêche tout simplement de s’exécuter.


 
Merci MaybeEijOrNot.
 
Il n'y a pas une façon plus simple pour activer le fichier qui se termine par ".xlsx" ???  
 
Et puis, j'ai aussi pensé à ça : Application.Workbooks(1).Activate ou Workbooks(1).Activate
 
Ou alors : ThisWorkbook.Application.Visible = False
 
???
 


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2413457
MaybeEijOr​Not
but someone at least
Posté le 29-03-2022 à 11:46:36  profilanswer
 

Rien à voir, le .activate va passer le classeur en "actif" donc oui la macro va s’exécuter dessus mais ce n'est pas le problème. Le problème c'est de sélectionner lequel est à activer. Ici tu actives le premier sans savoir lequel sera le premier. T'assurer d’exécuter la macro dans le bon classeur c'est une dizaine de lignes assez simples au max. Pour vérifier une "extension" tu peux split le nom avec le point et garder la dernière occurrence. Pour vérifier si un nom revient à chaque fois tu peux utiliser InStr, quand tu sais que tu as des longueurs fixes tu peux utiliser les fonctions Left, Right et Mid complétée de Len (longueur totale de la chaîne).

 

De manière générale, le .activate est à éviter, tu n'en as pas besoin, suffit d'utiliser le With. D'ailleurs je corrige mon exemple (pas besoin de repréciser Wbk à l'intérieur du With, c'est tout son intérêt) :

Code :
  1. For Each Wbk In Workbooks
  2.         cName = Wbk.Name
  3.         cName = Left(cName, Len(cName) - 1)
  4.         If cName = "Classeur" Then
  5.             Exit For
  6.         End If
  7.     Next
  8.     With Wbk
  9.         MsgBox (.Name)
  10.     End With

Message cité 1 fois
Message édité par MaybeEijOrNot le 29-03-2022 à 11:47:01

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2413461
scaryfan
Apple Inside
Posté le 29-03-2022 à 12:10:45  profilanswer
 

MaybeEijOrNot a écrit :

Rien à voir, le .activate va passer le classeur en "actif" donc oui la macro va s’exécuter dessus mais ce n'est pas le problème. Le problème c'est de sélectionner lequel est à activer. Ici tu actives le premier sans savoir lequel sera le premier. T'assurer d’exécuter la macro dans le bon classeur c'est une dizaine de lignes assez simples au max. Pour vérifier une "extension" tu peux split le nom avec le point et garder la dernière occurrence. Pour vérifier si un nom revient à chaque fois tu peux utiliser InStr, quand tu sais que tu as des longueurs fixes tu peux utiliser les fonctions Left, Right et Mid complétée de Len (longueur totale de la chaîne).
 
De manière générale, le .activate est à éviter, tu n'en as pas besoin, suffit d'utiliser le With. D'ailleurs je corrige mon exemple (pas besoin de repréciser Wbk à l'intérieur du With, c'est tout son intérêt) :

Code :
  1. For Each Wbk In Workbooks
  2.         cName = Wbk.Name
  3.         cName = Left(cName, Len(cName) - 1)
  4.         If cName = "Classeur" Then
  5.             Exit For
  6.         End If
  7.     Next
  8.     With Wbk
  9.         MsgBox (.Name)
  10.     End With



 
OK !
Donc dans mon cas, le code que je vais mettre en début de macro est le suivant :
 

Code :
  1. For Each Wbk In Workbooks
  2.         cName = Wbk.Name
  3.         cName = Left(cName, Len(cName) - 1)
  4.         If cName = "Trucmachin" Then
  5.             Exit For
  6.         End If
  7. Next
  8. With Wbk
  9.         Workbooks(.Name).Activate
  10. End With


 
Désolé, j'ai remis un "Activate"...  :D  


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
mood
Publicité
Posté le 29-03-2022 à 12:10:45  profilanswer
 

n°2413463
MaybeEijOr​Not
but someone at least
Posté le 29-03-2022 à 12:16:12  profilanswer
 

Dans ce cas là, adapte la ligne :
cName = Left(cName, Len(cName) - 1)
 
Le -1 élimine le dernier caractère, tu dois en éliminer plus.
Si tu tiens au .activate, tu peux enlever le With ... End With. Et tu peux faire le .activate directement sur Wbk (Wbk.activate) qui correspond à l'occurrence dans Workbooks quand la boucle a été interrompue.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2413466
scaryfan
Apple Inside
Posté le 29-03-2022 à 12:37:07  profilanswer
 

OK je teste tout à l'heure !  :wahoo:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2413480
scaryfan
Apple Inside
Posté le 29-03-2022 à 14:07:52  profilanswer
 

MaybeEijOrNot,
 
Désolé de t'embêter encore, mais ça ne fonctionne pas.
La macro reste sur le PERSONAL.xlsb...  :fou:  
 
J'ai testé sur mon poste à nouveau et ça fonctionne... il y a donc bien quelque chose qui est différent chez mon collègue...  :fou:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2413488
MaybeEijOr​Not
but someone at least
Posté le 29-03-2022 à 14:37:48  profilanswer
 

Mais comment tu sais que la macro reste sur le PERSONAL.xlsb ?
 
Et c'est quoi ta modif' au final ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2413492
scaryfan
Apple Inside
Posté le 29-03-2022 à 15:00:36  profilanswer
 

MaybeEijOrNot a écrit :

Mais comment tu sais que la macro reste sur le PERSONAL.xlsb ?
 
Et c'est quoi ta modif' au final ?


 
Au début de ma macro, j'enregistre le nom du classeur actif dans une mémoire WBN... et en mode débogage, chez mon collègue, quand je mets ma souris sur la mémoire - après que la macro soit passé sur la ligne - VBA m'affiche "PERSONAL.xlsb"... tout simplement...
Et sur mon poste, c'est bien "TRUCMACHIN.xlsx" qui s'affiche...
 
C'est à péter un câble...  :o


Message édité par scaryfan le 29-03-2022 à 15:02:08

---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2413496
MaybeEijOr​Not
but someone at least
Posté le 29-03-2022 à 15:23:24  profilanswer
 

Et si tu fais juste un :

Code :
  1. MsgBox(ActiveWorkbook.Name)
  2. MsgBox(Workbooks("PERSONAL.xlsb" ).name)


 
Qu'obtiens-tu ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2413498
scaryfan
Apple Inside
Posté le 29-03-2022 à 15:24:48  profilanswer
 

MaybeEijOrNot a écrit :

Et si tu fais juste un :

Code :
  1. MsgBox(ActiveWorkbook.Name)
  2. MsgBox(Workbooks("PERSONAL.xlsb" ).name)


 
Qu'obtiens-tu ?


 
Je vais essayer...  :)  


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2413560
rufo
Pas me confondre avec Lycos!
Posté le 29-03-2022 à 23:02:29  profilanswer
 

Question bête : le collègue a la même version d'Excel que toi ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2413681
scaryfan
Apple Inside
Posté le 31-03-2022 à 13:04:03  profilanswer
 

:hello:  
 
Effectivement, on va vérifier ça...  :)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro qui s'exécute sur Personal.xlsb

 

Sujets relatifs
macro word pour intervertir les paragraphes deux par deuxmacro de publipostage excel possible?
Macro de publipostage en multiple fichiers pdf - Message d'erreurAppel PowerShell dans une macro
Perte des données copiées lors du lancement d'une macro VBA/Excelmacro java sous libre office
Macro pour enregistrer en xlsm sur bureau avec date dans le nomMacro pour copier un tableau avec mot cle de word vers excel et dispat
Macro copie vers un autre fichier[LibreOffice][Tableur] Macro pour actualiser des liens externes html
Plus de sujets relatifs à : Macro qui s'exécute sur Personal.xlsb


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR