Formule Excel pour travail/repos

@Cow18

oui, c’est mieux quand c’est pour plusieurs cellules en même temps ! :+1:

je m’en suis inspiré pour faire la v6 : Essai v6.xlsm (17,2 Ko)

mais j’ai préféré faire avec « c » et « x » seulement (et uniquement en minuscules,
pas en majuscules)
; j’ai pas envie de taper « C » ou « X » et j’appuie sur Verr Maj
seulement quand je vais à avoir taper beaucoup de lettres en majuscules, ce qui
est très rare : la plupart du temps, mon clavier est en minuscules.

je connais Intersect(Target, ...) mais je ne l’ai pas utilisé dans v5 ni dans v6
car la dernière ligne est variable.

tu as utilisé Me.Range("B3:C100") ; pourquoi Me. ? moi je l’utilise seulement dans un
UserForm ; ici, le Me. est pour Feuil1, mais pour moi, il est inutile car comme la sub est
dans le Module de Feuil1, Range("B3:C100") sans référence de feuille suffit : c’est une
référence implicite à la feuille du module Feuil1, de la même façon que dans un module
standard, ça ferait référence à la feuille active.

pour le 100 de Range("B3:C100"), j’ai préféré l’adapter selon la dernière cellule utilisée
de la colonne A ; ici c’est A33.

j’ai préféré supprimer ton Case "" car ainsi, quand on supprime des coches via la touche
Suppression : ça remet la police "Calibri" ; dans v5, je l’avais fait exprès pour qu’il n’y
ait pas ❹ et le symbole bizarre de la feuille quand on tape « c » ou « x » dans une cellule
vide ; en laissant Case "", après effacement de coches, ça laissait "Wingdings 2".


Code VBA de Module1 :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Isect As Range, c As Range, d&, v$
  d = Cells(Rows.Count, 1).End(3).Row
  Set Isect = Intersect(Target, Range("B3:C" & d))
  If Isect Is Nothing Then Exit Sub
  Application.EnableEvents = 0
  For Each c In Isect.Cells
    v = c.Value
    Select Case v
      Case "c", "x"
        c.Font.Name = "Wingdings 2"
        c.Value = IIf(v = "c", "R", "S")
      Case Else: c.Font.Name = "Calibri"
    End Select
  Next c
  Application.EnableEvents = -1
End Sub

Merci à tous.
Après avoir regardé et testé tous les fichiers, c’est celui de @rhodo sous le nom « Essai Cow18.xlsx » qui me plait le plus

@Bruno77 : on s’est croisés ; regarde aussi mon post précédent.

avantage : tu pourras utiliser Ctrl Entrée (grâce à @Cow18).

@rhodo, be surprised …
et pourquoi ?

Sub test()
     With Sheets("feuil1")
          With .Range("A2:C33")
               .Offset(1, 1).Resize(, 2).ClearContents
               .AutoFilter 1, "<=01/10/2025"
          End With

          .Range("A1").Value = "x"
          .Range("A1").Copy
          .Range("B3:C33").PasteSpecial xlValues     'un "x" dans cette plage (moitié filtrée)

          .Range("A2:C33").AutoFilter
     End With
End Sub

Bonjour @Cow18,

en lisant ton code VBA, voici ce que j’ai compris :

tu effaces B2:C33 puis tu filtres A2:C33 pour une date jusqu’au 1er octobre 2025 inclus ;
tu mets "x" en A1, pour en faire un copier / coller valeur en B3:C33 ; tu ôtes le filtre.

ainsi, via un filtre, ça t’as permis de mettre des "x" en B3:C33 pour toutes les lignes
dont la date en colonne A est <= 01/10/2025.

bon, ok ; mais je n’ai pas compris pourquoi tu fais tout ça ; comme je ne suis pas sûr
que ce soit utile en pratique, tu as fait ça juste pour le fun ? ou alors, peut-être qu’il
y a quelque chose qui m’a échappé ?

quoi qu’il en soit, je te souhaite de passer de bonnes fêtes de Noël,
et aux autres aussi (contributeurs, demandeurs, et visiteurs).

Oui, c’est ça, vous lisez et vous supposez quelque chose sans le tester, la plupart des erreurs est causé par l’objet entre l’écran et la chaise. Vous êtes trop vite avec vos commentaires …
Excel ne réagit pas toujours comme vous le souhaitez. (ici 2 fois)

PS. je souhaite aussi des bonnes fêtes de Noel à tout le monde

Bonsoir @Cow18,

sur v5, j’ai essayé ta sub test() et ça donne ceci :

a) en B3:C33, ça met ❹ ou « x » (c’est coché partout !)
b) en A1, ça met « x »

désolé, je ne vois toujours pas l’intérêt ; mais peut-être
qu’il fallait essayer sur une des autres versions ? :thinking:

avec ce « Pastespecial xlvalues », on a un « x » partout dans B3:C33, le filtre n’a aucun influence.

1 « J'aime »

ah, d’accord, ok ; merci pour ta réponse. :slightly_smiling_face:

Cela fait la même chose que se positionner dans la cellule A1.048.000 (et …) et puis on fait CTRL+flèche UP et comme A1.048.000 est vide, on est envoyé vers la première cellule visible non-vide, cad ici la cellule qui contient le 10 janvier 2025, A12 (votre capture d’écran n’est pas juste après ma macro). Donc votre « d » = 12 et votre macro remplace toutes les cellules de B3:C12.
C’est une erreur qu’on voit presque partout, il faut enlever l’autofilter quand on fait ce truc.

ah oui, ça je sais ; mais comme dans l’énoncé @Bruno77 ne parle pas de filtre,
j’ai pensé que je pouvais faire comme sur mon PC où je n’ai pas mis de filtre
pour cet exo ; s’il met un filtre, alors je le laisse prendre une de tes solutions.

mais en fait, la solution serait d’ôter le filtre juste avant de « calculer » d.

Private Sub Worksheet_Change(ByVal Target As Range)
     Dim Isect As Range, v, c, i

     i = Evaluate("max(if(A:A<>"""",row(A:A),0))")     'oubien on le fait ici sans fonction personnalisée
     Set Isect = Intersect(Target, Me.Range("B3:C" & DerniereLigne(Me.Range("A:A"))))     'oubien ici avec la fonction personnalisée
     If Isect Is Nothing Then Exit Sub

     Application.EnableEvents = 0
     etc
dans un module normal
Function DerniereLigne(plage As Range)
     Dim Adres
     Adres = plage.Parent.Name & "!" & plage.Address(0, 0)
     DerniereLigne = Evaluate(Replace("max(if(#<>"""",row(#),0))", "#", Adres))
End Function
1 « J'aime »

l’utilisation de « Me », on peut disputer, ce n’est pas vraiment nécessaire, mais j’utilise parfois des "With…End With et si cet Isect est entre ces 2, c’est plus lisible, mais pour Excel, il ne verra pas des différences, c’est plutôt moi, je suis prudent, déformé par les erreurs commises dans le passé.

1 « J'aime »

j’ai préféré supprimer ton Case "" car ainsi …

si on laisse ce Case «  », le font ne change pas, un tout petit gain de temps, je sais c’est presque 0…

Vous voyez, vous donnez des commentaires, la plus part sans bien réfléchir, mais quand je fais quelque chose, c’est souvent que l’experience (en faisant des fautes) qui me dit de le faire comme ça.

1 « J'aime »

ok, merci pour les infos de tes 3 derniers posts ! :slightly_smiling_face::+1:

juste pour m’amuser, la durée de changer le font de calibri vers Wingding 2 est 2 fois la durée de Wingdings vers Calibri, environ 0.04 milliseconde/cellule.
Donc si vous modifiez vos 60 cellules en même temps 2 miilisecondes :rofl:

1 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.