Exécuter une macro pour toutes les feuilles d'un classeur [Résolu]

Signaler
Messages postés
4
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
31 mars 2021
-
Messages postés
4
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
31 mars 2021
-
Bonjour,

Je sollicite votre aide.

En effet, j'ai écrit une macro et elle fonctionne, mais seulement sur un onglet.

La voici :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Union([B17:B41], [C17:C41])) Is Nothing Then
If IsEmpty(Target) Then
Target = "X"
Cancel = True
Else
If Target = "X" Then
Target = ""
Cancel = True
End If
End If
End If
End Sub

Or, je voudrais qu'elle s'exécute pour l'ensemble des onglets (200) du classeur.

J'ai fait des recherches et ça donne ça :

Sub Dosomething()

Dim Ws As Worksheet

Application.ScreenUpdating = False
For Each Ws In Worksheets
Ws.Select
Call Runcode
Next
Application.ScreenUpdating = True
End Sub
Sub Runcode()
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Union([B17:B41], [C17:C41])) Is Nothing Then
If IsEmpty(Target) Then
Target = "X"
Cancel = True
Else
If Target = "X" Then
Target = ""
Cancel = True

Next Ws

End Sub

Mais ça ne fonctionne pas (message d'erreur : Erreur de compilation: End Sub attendu).

NOTA : j'ai inséré un module et y ai inscrit ce code.


J'espère avoir clairement formulé mon problème.

Tout comme j'espère que quelqu'un pourra m'aider.

D’avance merci.

Jef

3 réponses

Messages postés
7331
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 avril 2021
622
Bonjour,

a mettre dans ThisWorkbook:

Option Explicit
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'ton code
End Sub

Messages postés
4
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
31 mars 2021

Bonjour cs_Le Pivert,

Tout d'abord merci d'avoir répondu si vite.

J'ai donc écrit dans ThisWorbook :

Option Explicit
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Union([B17:B41], [C17:C41])) Is Nothing Then
If IsEmpty(Target) Then
Target = "X"
Cancel = True
Else
If Target = "X" Then
Target = ""
Cancel = True
End If
End If
End If
End Sub

Mais lorsque je double clique sur une case concernée, le "X" n'apparaît pas.

J'en suis désolé, car étant novice, je ne perçois forcément pas tout ce qu'il faut faire.

Mais encore merci.
Messages postés
7331
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 avril 2021
622
cela fonctionne!

entre B17 et B41 ainsi que C17 et C41, lorsque l'on double clic si vide on met un x sinon on efface le x

c'est bien le résultat attendu?
Messages postés
4
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
31 mars 2021

Tout à fait !

J'ai forcément fait un truc de travers.

Donc, j'ai refait la manip'.

Dans le classeur, j'ouvre VBA (clik droit, visualiser le code).

Je double-clique sur ThisWorkbook. Un champ s'ouvre et j'y inscris le code en question.

Et ensuite j'enregistre dans le format prenant en charge les macros.

Et oui, ça fonctionne !

Magnifique !

Merci 1000 fois et bonne continuation.

Jef