Lancer une partie de macro une seule fois

Bonjour le forum,

J'ai une macro auto_open qui effectue plusieurs tâches pour préparer l'utilisation des formulaires qui suivent l'application.

Dans cette macro auto_open j'ai une partie de code (donnée par le forum, encore merci ) qui récupère des noms de fichiers et les stocke à un endroit dans une feuille de mon classeur (environ 2000 noms de fichiers).

Le souci c'est que je suis contraint de réutiliser le code de la macro auto_open lorsque j'utilise mon application et donc à chaque fois la récupération des fichiers s'exécute et ça reprend beaucoup de temps.

Alors je me demande si je pouvais à l'intérieur de l'auto_open limiter la partie du code qui récupère les fichiers à une seule activation. En résumé dés que j'ouvre le fichier la récupération des fichiers se fait et ensuite elle ne s'exécutera qu'à la prochaine ouvertue du fichier.

Merci de vos aides et conseils.

Bonjour à tous,

Fait voir ton code en indiquant la partie à isoler,

ou mieux, le fichier raccourci

Amicalement

Claude.

Le voici en entier...

Sub auto_open()
Application.ScreenUpdating = False

Sheets("Données").Select

Range("A11:A65000").Select
Selection.NumberFormat = "@"

Sheets("Masque").Select

Range("D7").Select
Selection.NumberFormat = "@"

Range("D7:H7,A111:AJ117,X29").Select
Selection.ClearContents

Range("A2").Select

Dim H1 As Object

For Each H1 In Cells.Hyperlinks
Cells(H1.Range.Row, H1.Range.Column).Value = ""
Next

Range("Q5:T5,C37:H37,J37:O37,Q37:V37,X37:AC37,AE37:AJ37,
_M44:O44,M46:O46,AG57:AI57,AG59:AI59,AG71:AI71, _AG73:AI73,AG85:AI85,AG87:AI87,AG99:AI99").Select
 Selection.ClearContents

[i][b]Dim MyPath$, FName$, Mem$, i

    MyPath = "C:\..............\................\..................\"
    FName = Dir(MyPath & "*.*")

Sheets("Liste Fichiers").Select

Range("A:A").Select
Selection.ClearContents

Range("A2").Select

    Do While FName <> ""
        [A65536].End(xlUp)(2) = FName
        FName = Dir
    Loop[/b][/i]
Sheets("Masque").Select

UserForm2.Show

End Sub

Ce qui est en Gars et en Italique ne doit s'exécuter qu'une seule fois à 'liuverture du fichier.

Merci de votre aide.

re,

Si j'ai bien compris,

1) la partie en gras, tu la mets dans un module (macro "Liste_fichiers" à créer)

2) le reste, tu le mets aussi dans le module (macro "MaMacro" à créer)

Dans le ThisWorkbook :

Private Sub Workbook_Open()
Call Liste_fichiers
Call MaMacro
End Sub

Comme çà à l'ouverture, çà fait les deux, ensuite les 2 macros sont indépendantes.

Le Sub Auto_Open est à supprimer.

Amicalement

Claude.

Bonjour,

Dans ton code tout ne s'exécute qu'une seule fois à l'ouverture de ton fichier.

Toutefois, évite les macros Auto_open. Avec Excel aujourdhui il faut utiliser

Private Sub Workbook_Open()
....Ton code actuel ...
End Sub

Code à placer dans Thisworkbook en VBA et supprimer Sub auto_open

Pour ce qui est de ton code, peux-tu dire ce que tu cherches à faire ici :

For Each H1 In Cells.Hyperlinks
Cells(H1.Range.Row, H1.Range.Column).Value = ""
Next

A te relire

Dan

Edit : oups Claude !! Désolé j'ai posté sans te voir.

Merci à vous deux pour la réponse si rapide, je vais tenter de faire ce que vous me proposez.

Pour Nad Dan le code, avec la boucle For Each, est utilisé pour qu'à chaque ouverture tous les liens hypertexte qui ont été créés soient supprimés.

Je viens de tester le code à l'instant comme vous l'avez proposé et c'est tip top. Un immense merci pour vos aides et conseils avertis.

Re,

On pouvait rendre ta macro plus rapide donc juste un petit mot si tu reviens ...

Supprimer tes liens hypertextes, fais ceci plutôt que de rentrer dans une boucle :

Range("H1:H65000").Hyperlinks.Delete

Si tu utilises ce code supprime Dim H1 as Object

A bientôt

Dan

Rechercher des sujets similaires à "lancer partie macro seule fois"