Activer une sub sur toutes les feuilles

Fermé
Marillies - Modifié par Marillies le 15/09/2011 à 10:05
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 17 sept. 2011 à 08:04
Bonjour,

Après avoir lu maints et maints topics sur la répétition d'une macro sur toutes les feuilles, je sèche. Ma macro marche bien sur une feuille, mais elle ne veut pas se repeter sur les autres...

C'est du code VBA pour excel.

En gras ce que j'ai rajouté pour la faire boucler sur toutes les feuilles :


Sub Auto_Open()

Dim sh As Worksheet

With ActiveWorkbook
For Each sh In Worksheets
With sh


Dim TODAY As Integer
TODAY = NoSemaineISO(Now)

For Each d In Range("A4:HP5")
If d.Value = TODAY Then
Application.Goto d.Offset(0, 0)
Application.Goto d.Offset(0, 45)
Application.Goto ActiveCell.Offset(2, -45)
End If
Next

End With
Next sh
End With

End Sub


Merci de votre aide
A voir également:

6 réponses

Heremion Messages postés 539 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 1 juin 2022 102
15 sept. 2011 à 10:04
Bonjour Marillies,

Et si tu places ton code dans un module? Cela ne résoudrait pas ton problème?
0
C'est déjà dans un module donc non ça ne résoud pas mon problème :).
0
Heremion Messages postés 539 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 1 juin 2022 102
15 sept. 2011 à 10:14
Dans un module, j'ai créé un Public Sub.

Dans chaque feuille, j'ai créé un évènement OnChange et dans le OnChange, j'ai fait un

Call FonctionContenueDansModule(Argument)


J'ai essayé en faisant cet appel sur chaque feuille, m'évitant de retaper toute la macro à chaque fois et ça fonctionne.

0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 15/09/2011 à 10:22
Bonjour,
1- je ne comprends pas l'utilité de cette procédure...
Application.Goto d.Offset(0, 45) ?????
Mais bon cela ne me regarde pas.

2- Lorsque tu utilises des "With Sheets(1) ... End With", pour agir sur la feuille 1, il faut ajouter un point . devant les objets que tu souhaites manipuler.
Exemple :
Sheets(1).Select 'tu sélectionnes la feuille 1 (select à éviter, c'est juste pour l'exemple) 
With Sheets(2) 
    Range("A10").Value = 100 ' sans le point devant Range, va agir sur la Feuille 1 (feuille sélectionnée préalablement)
    .Range("A10").Value = "ABCD" 'va agir sur la feuille 2 (feuille concernée par le with)
End With

Cordialement,
Franck P
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Heremion : Je ne comprend pas. Il faut que je l'écrive dans chaque feuille ?

Pijaku : 1- C'est une bidouille de mon prédécesseur que je n'ai pas l'autorisation de modifier. Cela centre sur le numéro de la semaine en cours.

2- Est ce que tu peux me montrer dans ma macro ou est ce que je dois modifier directement, parce que j'ai essayé de mettre des sh. mais ça bug.
-> Autre question : il faut que je mette le nom de la feuille à chaque fois, ou sh remplace ce nom la ?

-> Je ne suis pas informaticienne de base ^^
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 15/09/2011 à 10:57
Ta macro modifiée, comme ça devrait fonctionner ... ou pas (non testé) :
Sub Auto_Open()  
Dim sh As Worksheet  
Dim TODAY As Integer  
Dim d As Range 

For Each sh In ThisWorkbook.Worksheets  
    With sh  
        TODAY = NoSemaineISO(Now)  
        For Each d In .Range("A4:HP5") 'j'ai ajouté un point devant Range 
            If d.Value = TODAY Then  
                Application.Goto d.Offset(0, 0)  
                Application.Goto d.Offset(0, 45)  
                Application.Goto ActiveCell.Offset(2, -45)  
            End If  
        Next d 
    End With  
Next sh  
End Sub 
0
Il me dit incompatibilité de type sur la ligne
If d.value = TODAY Then
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
15 sept. 2011 à 14:17
Que contient ta fonction NoSemaineISO?
Function NoSemaineISO()
??????
End function
0
Pour trouver le numéro de la semaine en fonction de la date d'aujourd'hui.

Function NoSemaineISO(d As Date) As Integer
NoSemaineISO = Format(d, "ww", vbMonday, vbFirstFourDays)
End Function
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
17 sept. 2011 à 08:04
Alors essaye ceci :
Sub Auto_Open()
Dim sh As Worksheet
Dim TODAY As Integer
Dim Cel As Range

For Each sh In ThisWorkbook.Worksheets
With sh
TODAY = NoSemaineISO(Now)
For Each Cel In .Range("A4:HP5") 'j'ai ajouté un point devant Range
If Cel.Value = TODAY Then
Application.Goto Cel.Offset(0, 0)
Application.Goto Cel.Offset(0, 45)
Application.Goto ActiveCell.Offset(2, -45)
End If
Next Cel
End With
Next sh
End Sub
0
Heremion Messages postés 539 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 1 juin 2022 102
15 sept. 2011 à 10:53
En fait, tu mets ta fonction ou ton sub dans le module Module1 par exemple, précédé bien évidemment du mot "public".

Et dans chaque feuille, dans l'évènement sur lequel tu veux que ton code s'exécute, tu fais un
Call TaFonctionDuModule(argument)

0
Il y a vraiment beaucoup de feuilles, je cherchais quelque chose de moins répétitif.
0