Exécuter une macro pour toutes les feuilles d'un classeur

Résolu/Fermé
Jef35_0206 Messages postés 4 Date d'inscription mercredi 31 mars 2021 Statut Membre Dernière intervention 31 mars 2021 - 31 mars 2021 à 12:59
Jef35_0206 Messages postés 4 Date d'inscription mercredi 31 mars 2021 Statut Membre Dernière intervention 31 mars 2021 - 31 mars 2021 à 14:31
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
A voir également:

3 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 mars 2021 à 13:43
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

1
Jef35_0206 Messages postés 4 Date d'inscription mercredi 31 mars 2021 Statut Membre Dernière intervention 31 mars 2021
31 mars 2021 à 14:01
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 mars 2021 à 14:22
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?
0
Jef35_0206 Messages postés 4 Date d'inscription mercredi 31 mars 2021 Statut Membre Dernière intervention 31 mars 2021
31 mars 2021 à 14:31
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
0