macro pour griser des cellules en fonction des lignes et colonnes

crown54

XLDnaute Junior
bonsoir, il y a quelques temps j'avais demandé une macro pour griser des cellules en fonction de ce qui était écrit dans certaines colonnes.
Voici cette macro:
Sub Griser()
Dim c As Range
For Each c In Rows("1:1").SpecialCells(xlCellTypeConstants, 23)
If c = "sam" Or c = "dim" Then c.Offset(2, 0).Resize(37).Interior.Pattern = xlGray50
Next
End Sub

Dans l'exemple ci joint je souhaiterais griser uniquement les cellules de la ligne 18 correspondant aux colonnes jeu et ven et y inscrire 70%.

ma question est :est il possible d'appliquer une macro de ce style pour griser des cellules mais qui seraient dans une ligne en particulier?

D'avance merci.
 

Pièces jointes

  • planning.xlsx
    14.3 KB · Affichages: 69
  • planning.xlsx
    14.3 KB · Affichages: 56
  • planning.xlsx
    14.3 KB · Affichages: 57

Papou-net

XLDnaute Barbatruc
Re : macro pour griser des cellules en fonction des lignes et colonnes

Bonsoir crown54,

Peut-être en modifiant le code comme ceci:

Code:
Sub Griser()
Dim c As Range
For Each c In Rows(1).SpecialCells(xlCellTypeConstants, 23)
  If c = "jeu" Or c = "ven" Then
    With c.Offset(17, 0).Interior
      .Pattern = xlSolid
      .ThemeColor = xlThemeColorDark2
    End With
    c.Offset(17, 0).Value = "70%"
  End If
Next
End Sub
Cordialement.
 

crown54

XLDnaute Junior
Re : macro pour griser des cellules en fonction des lignes et colonnes

merci beaucoup Papou-net.
Du coup je suis passer par une autre macro et une mise en forme conditionnelle.
la macro:
Sub cc()
Dim c As Range
For Each c In Rows("1:1").SpecialCells(xlCellTypeConstants, 23)
If c = "jeu" Or c = "ven" Then c.Offset(17, 0).Resize(1).FormulaR1C1 = "70%"
Next
End Sub


et mise en forme en gris si une case contient 70%.


Par contre autre question j'essaie de trouver une macro qui va mettre une lettre dans une cellule d'une ligne précise mais avec la condition que la cellule soit vide.
Dans l'exemple précédent je souhaite inscrire un C dans toutes les cellules vides des lignes 18 et 19 sauf dans les colonnes sam et dim. une idée?

merci,
cordialement
 

Papou-net

XLDnaute Barbatruc
Re : macro pour griser des cellules en fonction des lignes et colonnes

Bonjour crown54,

Voici un exemple de macro, située dans le module Change de Feuil1:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
Application.EnableEvents = False
For Each Cel In Rows(1).SpecialCells(xlCellTypeConstants)
  If InStr(Cel, "sam dim") = 0 And Cel.Offset(17, 0) <> "" Then
    If Cel.Offset(18, 0) = "" Then Cel.Offset(18, 0) = "C"
    If Cel.Offset(19, 0) = "" Then Cel.Offset(19, 0) = "C"
  End If
Next
Application.EnableEvents = True
End Sub
Je te laisse vérifier sur la pièce jointe si ça répond à la question.

Cordialement.
 

Pièces jointes

  • planning-2.xlsm
    20.1 KB · Affichages: 59

crown54

XLDnaute Junior
Re : macro pour griser des cellules en fonction des lignes et colonnes

Bonjour Papu-net

merci de ton aide.
Malheureusement je ne comprends pas trop le principe de ta macro et l'histoire de la feuille 1 et du module change.
Peux tu m'en dire plus sur la façon dont elle fonctionne pour que je comprenne un peu.
Je suis très novice en la matière.

D'avance merci.
 

Papou-net

XLDnaute Barbatruc
Re : macro pour griser des cellules en fonction des lignes et colonnes

RE

Pour commencer, il faut ouvrir l'éditeur VBA au moyen du raccourci clavier ALT-F11.

Dans la fenêtre de gauche, tu double-cliques sur Feuil1(Feuil1) et dans la fenêtre principale tu vois apparaître la procédure Private Sub Worksheet_Change(ByVal Target As Range). Cette macro événementielle se déclenche chaque fois qu'une cellule est modifiée dans la 1ère feuille (Feuil1).

Voici quelques explications concernant les instructions qui y figurent:

Code:
Dim Cel As Range 'définit la variable Cel en tant que cellule
Application.EnableEvents = False 'Suspend le déclenchement de la procédure lors de la modification des cellules déclenchée par la macro
For Each Cel In Rows(1).SpecialCells(xlCellTypeConstants) 'cette boucle balaie toutes les cellules de la ligne 1 qui contiennent une valeur
  If InStr(Cel, "sam dim") = 0 And Cel.Offset(17, 0) <> "" Then 'si la cellule (Cel)  ne contient ni "sam" ni "dim" alors les instructions suivantes jusqu'au Next sont effectuées. Sinon, le Next renvoie à la cellule suivante
    If Cel.Offset(18, 0) = "" Then Cel.Offset(18, 0) = "C" 'si la cellule située 18 lignes sous Cel et sur la même colonne est vide elle se voit affectée la valeur "C". Offset(ligne, colonne) signifie décalage de 18 lignes en dessous et 0 colonne par rapport à Cel
    If Cel.Offset(19, 0) = "" Then Cel.Offset(19, 0) = "C" 'idem ci-dessus
  End If
Next
Application.EnableEvents = True 'rétablit la détection de modification des cellules
Espérant avoir été suffisamment explicite (tu peux toujours utiliser l'aide pour trouver davantage de précisions sur les différentes instructions).

Cordialement.
 

crown54

XLDnaute Junior
Re : macro pour griser des cellules en fonction des lignes et colonnes

merci pour ces explications très intéressantes.
Malheureusement ça ne répond pas à mon problème mais je me suis peut être mal expliqué.
Je voudrais que la macro vérifie sur toutes les cellules d'une ligne (18-19 dans l'exemple) si il y a quelque chose d'écrit à l'intérieur ou une mise en forme particulière (CF "sam" et "dim") et si il n'y a rien y inscrire un C.
Cela revient à faire une macro avec 2 conditions: vérifier sur les lignes 18 et 19 à l'intersection avec les colonnes ayant lun mar mer jeu ven présent dans la ligne 1, que la cellule est vide.

voilà en espérant être plus clair et en te remerciant pour ton aide précieuse
 

Papou-net

XLDnaute Barbatruc
Re : macro pour griser des cellules en fonction des lignes et colonnes

RE

La macro précédente se déclenchait chaque fois qu'une cellule de Feuil1 était modifiée. De ce fait, la mise à jour des lignes 19 et 20 était automatique. Les critères étaient bien respectés:

- Cellule correspondante en ligne 1 différente de "sam" ou "dim"

- Cellule correspondante en ligne 19 ou 20 = ""

Si tu désires une macro plus générale, voici ton fichier en version 3. Un clic sur le bouton Démo actualise les lignes 19 et 20. La structure du code restant très similaire à la précédente, sinon que la macro Exemple se trouve à présent dans Module1.

Je ne sais pas si j'ai bien compris ta nouvelle demande, alors je reste à ta disposition.

Cordialement.
 

Pièces jointes

  • planning-3.xlsm
    23.4 KB · Affichages: 54

crown54

XLDnaute Junior
Re : macro pour griser des cellules en fonction des lignes et colonnes

Je n'arrive pas à l'adapter à mon classeur.
Je voudrais de plus pouvoir la lancer sur tous les feuillets, que faut il mettre?
Voici mon fichiers planning complet si ça peut t'aider.
Si on se place sur le mois de mars dans les lignes 18 et 19 j'aimerais au moment où j'élabore le planning que la macro me remplisse d'un seul coup toutes les cases vide des lignes (excepté sam et dim) avec un C et là ma mise en forme conditionnelle me la colore directement en vert.
Par contre si je supprime le C elle doit redevenir vide pour pouvoir y mettre autre chose.

Voilà mon problème si tu peux m'aider encore.
Merci d'avance
 

Pièces jointes

  • planning test.xlsm
    187.6 KB · Affichages: 45
  • planning test.xlsm
    187.6 KB · Affichages: 49
  • planning test.xlsm
    187.6 KB · Affichages: 54

Papou-net

XLDnaute Barbatruc
Re : macro pour griser des cellules en fonction des lignes et colonnes

RE

Si on se place sur le mois de mars dans les lignes 18 et 19 j'aimerais au moment où j'élabore le planning que la macro me remplisse d'un seul coup toutes les cases vide des lignes (excepté sam et dim) avec un C
Que veux-tu dire par "au moment où j'élabore le planning"?

Comment déterminer ce moment et quels sont les critères: est-ce à la création du fichier ou à son ouverture?

Par contre, pour lancer la macro sur toutes les feuilles, pas de problème après la réponse aux questions ci-dessus.

A +

Cordialement.
 

crown54

XLDnaute Junior
Re : macro pour griser des cellules en fonction des lignes et colonnes

c'est à dire que les gens rentrent leur jours d'absence (grisés) mois par mois et quand je fais le planning un mois avant je remplie les cases vides (où les gens sont présents) avec des C (qui correspond à leur poste) pour les lignes 18 et 19.

voilà en espérant avoir répondu à ta question.

bonne soirée et merci encore
 

Discussions similaires

Réponses
7
Affichages
329

Statistiques des forums

Discussions
312 305
Messages
2 087 080
Membres
103 457
dernier inscrit
fab2614