Comment exécuter ma macro Excel automatiquement ?

Comment exécuter ma macro Excel automatiquement ? - VB/VBA/VBS - Programmation

Marsh Posté le 23-12-2012 à 13:22:50    

Bonjour,
 
je ne sais pas si je poste au bon endroit même s'il me semble que oui. J'ai un planning pour le boulot au format .ics (apparemment, c'est iCalcreator qui le génère si j'en crois le site web qui me fournit mon planning) et avant de l'importer dans mon google calendar, j'ai besoin de le modifier pour avoir un résultat "propre" à l'affichage en supprimer certaines cellules (le début de ma macro avec les Do-Loop) et en supprimant certains morceaux de texte dans les cellules (la fin de ma macro avec "cells.replace" ).
 
N'y connaissant rien, j'ai donc bidouillé à l'aide de google une macro Excel que voici:
 

Code :
  1. Sub Edition()
  2. Do
  3.     If Cells.Find(What:="DTSTAMP" ) Is Nothing Then
  4.        Exit Do
  5.     Else
  6.        Cells.Find(What:="DTSTAMP" ).Activate
  7.        Selection.EntireRow.Delete
  8.     End If
  9. Loop
  10. Do
  11.     If Cells.Find(What:="UID" ) Is Nothing Then
  12.        Exit Do
  13.     Else
  14.        Cells.Find(What:="UID" ).Activate
  15.        Selection.EntireRow.Delete
  16.     End If
  17. Loop
  18. Do
  19.     If Cells.Find(What:="METHOD" ) Is Nothing Then
  20.        Exit Do
  21.     Else
  22.        Cells.Find(What:="METHOD" ).Activate
  23.        Selection.EntireRow.Delete
  24.     End If
  25. Loop
  26. Do
  27.     If Cells.Find(What:="X-WR" ) Is Nothing Then
  28.        Exit Do
  29.     Else
  30.        Cells.Find(What:="X-WR" ).Activate
  31.        Selection.EntireRow.Delete
  32.     End If
  33. Loop
  34. Do
  35.     If Cells.Find(What:="LOCATION" ) Is Nothing Then
  36.        Exit Do
  37.     Else
  38.        Cells.Find(What:="LOCATION" ).Activate
  39.        Selection.EntireRow.Delete
  40.     End If
  41. Loop
  42. Do
  43.     If Cells.Find(What:="PRODID" ) Is Nothing Then
  44.        Exit Do
  45.     Else
  46.        Cells.Find(What:="PRODID" ).Activate
  47.        Selection.EntireRow.Delete
  48.     End If
  49. Loop
  50. Do
  51.     If Cells.Find(What:="VERSION" ) Is Nothing Then
  52.        Exit Do
  53.     Else
  54.        Cells.Find(What:="VERSION" ).Activate
  55.        Selection.EntireRow.Delete
  56.     End If
  57. Loop
  58. Dim feuil As Worksheet
  59. For Each feuil In ThisWorkbook.Worksheets
  60.     feuil.Cells.Replace What:="T080000", Replacement:=""
  61.     feuil.Cells.Replace What:="T180000", Replacement:=""
  62.     feuil.Cells.Replace What:="T010000", Replacement:=""
  63.     feuil.Cells.Replace What:="T100000", Replacement:=""
  64. Next feuil
  65. End Sub


 
Donc, j'ouvre mon planning dans Excel, je crée une nouvelle macro, je copie/colle ce texte, je lance la macro. Hourra, ça fonctionne et fait exactement ce que je veux.
 
Maintenant, j'aimerais éliminer "je crée une nouvelle macro, je copie/colle ce texte, je lance la macro". Je voudrais un truc transparent pour l'utilisateur au final "en un clic" (ou deux). Donc je sauvegarde ma macro au format .xlam. Je lance le fichier et j'y mets mon planning puis je lance la macro mais ... marche pas !
 
Je ne sais pas si je suis bien clair, mais mes connaissances en dessous de zéro en macro, vba, excel et autres font que j'ai du mal à exprimer autrement ...
 
Si quelqu'un a pigé ce que je veux faire et peut m'aider, merci beaucoup !!
 
(ou alors un logiciel tout fait qui me modifie mes plannings au format iCal directement !)


Message édité par dwarfy le 23-12-2012 à 13:29:10
Reply

Marsh Posté le 23-12-2012 à 13:22:50   

Reply

Marsh Posté le 26-12-2012 à 14:17:40    

 
              Bonjour !   J'en déduis que c'est une version supérieure à 2003 ...
 
              Cela ne marche pas, oui mais quoi et où ?   A suivre en mode pas à pas par exemple …
 
              Vis à vis du code exposé, si la procédure est enregistrée dans un fichier indépendant en  .xlam,
              en ligne 67 est utilisé ThisWorkbook faisant référence au fichier contenant la procédure,
              ne pouvant donc pas fonctionner sur un fichier planning externe ‼   Mieux vaut utiliser la propriété ActiveWorkbook
 
              Autre chose, si une procédure comporte des répétitions dans lesquelles ne change qu'un paramètre,
              c'est préférable d'utiliser une boucle en y passant le paramètre afin d'alléger le code.
 
              Eviter absolument les .Activate & .Select pouvant énormément ralentir le processus;
              travailler directement sur les objets est bien plus concis et rapide !
 
              Dernier point :  lorsqu'il y a de nombreuses modifications dans un classeur,
                                     désactiver la mise à jour de l'écran (ScreenUpdating) rend l'exécution plus véloce …
 
              La procédure peut alors se "résumer" ainsi :
 

Code :
  1. Sub Edition()
  2.     Application.ScreenUpdating = False
  3.     For Each W In Split("DTSTAMP UID METHOD X-WR LOCATION PRODID VERSION" )
  4.         Do
  5.             Set Rg = Cells.Find(W)
  6.                  B = Rg Is Nothing
  7.             If Not B Then Rg.EntireRow.Delete
  8.         Loop Until B
  9.     Next
  10.     For Each Feuil In ActiveWorkbook.Worksheets
  11.         For Each W In Split("T080000 T180000 T010000 T100000" )
  12.             Feuil.Cells.Replace W, ""
  13.         Next W
  14.     Next Feuil
  15.     Application.ScreenUpdating = True
  16. End Sub


               J'ai préféré Split au lieu d'Array pour renvoyer un tableau …
 
               Pour continuer plus en avant, écrire un scénario en langage courant (& clair !) est nécessaire,
               cela fait ensuite gagner du temps et évite l'usine à gaz !
 
               Pour lancer automatiquement une macro à l'ouverture d'un classeur Excel, voir l'évènement Workbook_Open
               devant être codé dans le module ThisWorkbook et non pas dans un quelconque module standard …
 
               Pour afficher une boîte de dialogue afin de sélectionner un fichier, voir la méthode GetOpenFilename.
               Ouvrir ensuite le fichier via la méthode Workbooks.Open


Message édité par Marc L le 26-12-2012 à 16:17:54
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed