Changer format de cellules adjacentes

Résolu
thomanneca -  
 thomanneca -
Bonjour,

En cellule A1, j'ai une date
J'aimerais que les cellules A2, A3, A4 et A5 change de format en fonction de conditions à définir par rapport à la cellule A1.

Ex. si la date est un samedi, les 4 cellules suivantes seront en jaune

Merci de ne pas me répondre qu'on peut le faire avec les mises en forme conditionnelles, ce n'est pas l'objectif.

Merci pour votre aide

6 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    devrait aller:

    Private Sub Workbook_Open()
    Dim MyWeekDay
    With Worksheets("feuil1")
    For Each Cellule In .Range("D6:DQ37")
    Target = Cellule.Value
    If IsDate(Target) Then
    If Target < Range("F2") Then
    Cellule.Interior.Color = vbWhite
    With Cellule.Font
    .Color = RGB(64, 96, 255)
    .Italic = True
    End With
    Else
    Cellule.Interior.Color = vbWhite
    With Cellule.Font
    .Color = vbBlack
    .Italic = False
    End With
    End If
    MyWeekDay = Weekday(Target)
    'Jour semaine Samedi et Dimanche
    If MyWeekDay = 1 Or MyWeekDay = 7 Then
    'lettre en nombre
    NumCol = Range(Cellule.Address).Column
    'cherche le nom (la lettre) de la colonne+5
    ColFin = Split(Cells(8, NumCol + 5).Address, "$")(1)
    'changement couleur de fond
    .Range(Cellule.Address & ":" & ColFin & Cellule.Row).Interior.Color = vbBlack
    Else
    Cellule.Interior.Color = vbWhite
    End If
    End If

    Next Cellule
    End With
    End Sub
    1
  2. thomanneca
     
    l'objectif après sera d'étendre la fonction sur une plage de donnée entière

    cela donnerait quelque chose du genre :

    If MyWeekDay = [1] Or MyWeekDay = [7] Then

    Range(Target, Target(0, 5)).Interior.Color = vbBlack

    target serait A1 par exemple et le reste dans le but d'étendre la sélection de 5 cases vers la droite..

    mais évidemment, cela ne fonctionne pas :(
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Avec quoi voulez vous obtenir ces formats cellules ?????
    0
    1. thomanneca
       
      Je ne comprends pas la question, Avec quoi?

      en fait j'ai une plage assez grande de cellule dans laquelle j'aimerais affecter plusieurs conditions. J'essaye donc d'en faire une et les autres suivront facilement je crois.

      Donc dans l'exemple ici, j'aimerais dire que lorsque ma cellule A1 (target pour la plage) est un samedi, alors les cellules A1 à A5 se mettent en noir par exemple

      autrement dit, ma sélection target (=une seule cellule) se transforme en une petite plage (=5 cellules) et c'est sur cette plage que j'essaye de faire changer le format
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      votre deuxième message est apparu apres que j'ai valide le mien.

      Avec l'événement Private Sub Worksheet_SelectionChange(ByVal Target As Range), ça devrait aller. Je regarde la chose

      A+
      0
    3. thomanneca
       
      super merci
      0
    4. thomanneca
       
      en fait, seule la ligne ici en gras ne fonctionne pas..


      Private Sub Workbook_Open()
      For Each Cellule In Range("D6:DQ37")
      Target = Cellule.Value
      If IsDate(Target) Then
      If Target < Range("F2") Then
      Cellule.Interior.Color = vbWhite
      With Cellule.Font
      .Color = RGB(64, 96, 255)
      .Italic = True
      End With
      Else
      Cellule.Interior.Color = vbWhite
      With Cellule.Font
      .Color = vbBlack
      .Italic = False
      End With
      End If

      Dim MyDate, MyWeekDay
      MyDate = Target
      MyWeekDay = weekday(MyDate)
      If MyWeekDay = [1] Or MyWeekDay = [7] Then


      Range(Target, Target(0, 5)).Interior.Color = vbBlack


      Else
      Cellule.Interior.Color = vbWhite
      End If
      End If
      Next
      End Sub
      0
  4. thomanneca
     
    je pense que cela fonctionne ! :D

    merci beaucoup, je vais maintenant essayer de comprendre un peu le code pour pouvoir l'adapter si nécessaire

    ColFin = Split(Cells(8, NumCol + 5).Address, "$")(1)

    Pourriez-vous juste me dire d'où viennent le (1) et le 8 dans ce code ?

    Un grand merci
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re

    ColFin = Split(Cells(8, NumCol + 5).Address, "$")(1)

    8--> un numero ligne, parce qu'il en faut un
    "$")(1) ----> fait parti de l'instruction split pour la lettre colonne

    la reference n'a pas d'importance, l'objectif est d'avoir la lettre de la colonne qui nous interesse

    autre utilisation
    'recuperation de la ligne
    lig = Split(Range(cellule.Address).Address, "$")(2)
    0
  7. thomanneca
     
    Ok, super merci beaucoup pour votre aide ;-)

    Une très bonne journée à vous
    0