For each sur plusieurs Sheets

Signaler
Messages postés
16
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
29 mars 2012
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,
est il possible de faire un for each en précisant la plage range sur plusieurs sheets ?

J'ai douze onglets nommés des douze mois de l'année.
J'ai une date de départ disons le 14 mars.
J'ai une cellule que je sélectionne (disons ActiveCell sera le 17 avril)
Fin mars j'ai une case dont le fond est rose par exemple et début avril aussi.

Ce que je voudrais c'est que je puisse pour chaque cellulequejevaistester dans la plage C4:G9 des feuilles mars et avril que si la cellule n'est pas colorié alors a = a + 1

De plus :
J'ai fait une petite chose
datein est ma date d'entrée
dateact est la date de la cellule active

lemois = Month(datein)
Lemoisdefin = Month(dateact)

If lemois 1 Then a Janvier
If lemois 2 Then a Février
If lemois 3 Then a Mars
If lemois 4 Then a Avril
If lemois 5 Then a Mai
If lemois 6 Then a Juin
If lemois 7 Then a Juillet
If lemois 8 Then a Août
If lemois 9 Then a Septembre
If lemois 10 Then a Octobre
If lemois 11 Then a Novembre
If lemois 12 Then a Décembre

If Lemoisdefin 1 Then b Janvier
If Lemoisdefin 2 Then b Février
If Lemoisdefin 3 Then b Mars
If Lemoisdefin 4 Then b Avril
If Lemoisdefin 5 Then b Mai
If Lemoisdefin 6 Then b Juin
If Lemoisdefin 7 Then b Juillet
If Lemoisdefin 8 Then b Août
If Lemoisdefin 9 Then b Septembre
If Lemoisdefin 10 Then b Octobre
If Lemoisdefin 11 Then b Novembre
If Lemoisdefin 12 Then b Décembre


Est il possible de faire la même chose (range sur plusieurs sheets) en ayant comme départ Sheets("" & a) et comme arrivée Sheets("" & b) toujours sur la plage C4:G9 quelque soit la sheets


Merci beaucoup :)

11 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,
- Commence par ouvrir ton aide VBA sur la fonction MonthName ===>>>
voilà ce que deviennent tous tes Ifs :
a = monthname(lemois)
b =  monthname(lemoisdefin)

- tu nous parles de datein et de dateact, mais on n'en voit pas leur utilisation dans ton code et le reste de tes explications n'est pas suffisamment techniquement clair !
Avant même de passer à une boucle sur tes feuilles, il faudra que ces explications techniques permettent d'y voir suffisamment clair sur une seule feuille !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
16
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
29 mars 2012

Je ne voulais pas surcharger mon message avec un code trop long qui pour moi ne servait pas.

Donc si j'ai un
a = monthname(lemois)
b = monthname(lemoisdefin)


Puis je faire

For each toto in Range (Sheets("" & a).Range("C4:G9"): Sheets("" & b).Range("C4:G9"))
If toto.Interior.ThemeColor <> xlThemeColorAccent2 And toto.Interior.TintAndShade <> -9.99786370433668E-02 Then compte = compte + 1
Next toto

pour tester toto de la plage C4:G9 de la feuille a jusqu'à la plage C4:G9 de la la feuille b


Pour ce qui est de datein, c'est la date d'entrée
datein = Sheets("Fiche Administrative").Range("I9")

Dateact c'est la date qui est dans la cellule que je viens de sélectionner
dateact = ActiveCell.Value


Tout ce qui est plus haut est dans la macro mamacro appelé par
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range
If Not Application.Intersect(Target, Range("F4:I4, C5:I5, C6:I6, C7:I7, C8:H8")) Is Nothing Then Mamacro
End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Range (Sheets("" & a).Range("C4:G9"): Sheets("" & b).Range("C4:G9")

Ne saurait définir une plage.
Une plage de cellules ne concerne qu'une feuille !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
16
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
29 mars 2012

Donc il n'est pas possible de faire un for each sur plusieurs feuilles ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Oui, mais sur CHAQUE feuille (pour passer les feuilles en revue, une par une)
Ta question est assez étonnante.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Les feuilles de ton classeur composent une collection : la collection Sheets, composée d'objets Sheet.
Comme pour toute collection, on peut boucler sur ses éléments par une boucle For Each.
Exemple :
For each elmt in ma collection
......
Next

Ouvre ton aide VBA sur chacun des mots que j'ai soulignés. C'est fondamental.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
16
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
29 mars 2012

Ah, étonnante ?

Cela corse mon problème.
Si ma première feuille est en mars et que je clique en juillet.
Je dois tester toutes les feuilles de mars à juillet.
Si j'avais pu faire un test for each sur toutes les feuilles cela aurait été facile.
Mais là je ne vois pas ...

Merci en tout cas de répondre si vite
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Je te rappelle une partie de mes réponses :
Avant même de passer à une boucle sur tes feuilles, il faudra que ces explications techniques permettent d'y voir suffisamment clair sur une seule feuille !

Commence donc par cela, avant d'aller vers le reste (qui suivra, mais après, pas avant).



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Et pour qu'aucun doute ne subsiste dans ton esprit et te montrer qu'il te faut d'abord maîtriser sur une feuille, regarde ce petit test (qui te fera comprendre comment ensuite traiter chaque feuille) :
Dim dep As Integer, fin As Integer
dep = 2
fin = 10
For i = dep To fin
  MsgBox "voir ta feuille nommée " & MonthName(i) & " et y traiter chaque cellule (en boucle, donc) de ta plage de ton choix !"
Next

Il est, me semble-t-il, suffisamment "parlant". A toi de te réveiller un peu, maintenant. (cela devrait faire tilt, non ?)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
16
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
29 mars 2012

J'ai donc douze feuilles chacune nommé d'un mois de l'année
J'ai aussi deux autres feuilles nommés Fiche Administrative et Semaine

Dans mon workbook, à l'ouverture, la date d'entrée indiquée dans "fiche Administrative" prend la couleur orange.
La date de sortie qui est huit semaines après la date d'entrée prend aussi orange comme couleur de fond.

En rose pâle sont notés les jours fériés et les vacances prévues sur toute l'année.

Je clique sur une date.
Si elle n'est pas incluse entre la date d'entrée et la date de sortie un message apparait dans une boite de message indiquant que ce n'est pas possible.
Sinon dans la cellule G16 est indiqué le nombre de jours entre la cellule active et la date d'entrée en enlevant les jours fériés, les week ends et les vacances.

Par exemple si un gars entre le 14 mars et sort le 19 mai. Si je clique dans la feuille "Avril" sur la cellule du 10 avril le nombre de jours qu'il a passé est de 19

Je bloque sur le calcul du nombre de jours.

Je débute et donc bidouille beaucoup

Sub Mamacro()

datein = Sheets("Fiche Administrative").Range("I9")
dateout = Sheets("Fiche Administrative").Range("i10")
suiteb:

If ActiveCell < datein Or ActiveCell > dateout Then
MsgBox ("Votre sélection n'est pas dans le planning du jeune")
GoTo fina
End If

'permet de trouver le jour de la semaine
année = Year(Date)
ancourt = Right(année, 2)
reste = ancourt Mod 4
resteutile = (ancourt - reste) / 4
jour = Day(ActiveCell)

mois = Month(ActiveCell)

If mois 1 Then moise 1
If mois 2 Then moise 4
If mois 2 Then fin 28
If mois 3 Then moise 4
If mois 4 Then moise 0
If mois 5 Then moise 2
If mois 6 Then moise 5
If mois 7 Then moise 0
If mois 8 Then moise 3
If mois 9 Then moise 6
If mois 10 Then moise 1
If mois 11 Then moise 4
If mois 12 Then moise 6

If mois 1 Or mois 3 Or mois = 5 Or mois = 7 Or mois = 8 Or mois = 10 Or mois = 12 Then fin = 31
If mois 4 Or mois 6 Or mois = 9 Or mois = 11 Then fin = 30

If année Mod 4 0 And mois 1 Then ote = 1
If année Mod 4 0 And mois 2 Then
ote = 1
fin = 29
End If
ote = 0
siecle = 6

somme = ancourt + resteutile + jour + moise - ote + 6
garde = somme Mod 7

If garde 1 Then jour jour + 1
If garde 3 Then jour jour - 1
If garde 4 Then jour jour - 2
If garde 5 Then jour jour - 3
If garde 6 Then jour jour - 4
If garde 0 Then jour jour - 5

jourfin = jour + 4
If jourfin > fin Then jourfin = jourfin - fin

fina:

Range("g11") = "Du Lundi " & jour & " au vendredi " & jourfin
dateact = ActiveCell.Value

'différence entre la date ed la cellule active et la date d'entrée
testdate = DateDiff("d", datein, dateact)
testdata = DateDiff("ww", datein, dateact)

'enlève les week ends et inclus la date d'entrée

testdate = testdate - (testdata * 2) + 1



'je bloque là et c'est du bidouillage ne pas en tenir compte
'je voudrais là avoir mon calcul
'en partant de la date d'entrée, compter le nombre de jour de présence jusqu'à la date sélectionner en retranchant les jours fériés et les vacances qui 'sont en couleur de fond rose pâle (xlThemeColorAccent2  TintAndShade  -9.99786370433668E-02)
compta:

cherche2 = Month(datein)
lactive = ActiveCell.Row
cactive = ActiveCell.Column

lemois = Month(datein)
Lemoisdefin = Month(dateact)



Est ce que je suis plus clair. Sinon que veux tu exactement. J'ai peur de ne pas avoir saisi
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bien.
J'ai dit tout ce qu'il me paraissait devoir dire.
Le reste est ton appli, donc.
Ici : on ne traite pas une appli, mais un point spécifique et isolé.
Bonne étude.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient