Bonsoir serge,
ton fichier en retour : https://www.cjoint.com/c/MFAt30OZiL0
----------------------------------------------------------------------------------------------------------------
Partie A
MFC = Mise en Forme Conditionnelle
tu as écrit : « mais quand cellule vide prend la couleur de inf 14 ??? (VERT) »
si, c'est normal ; car quand une cellule est vide, sa valeur est : 0 ; puis comme
0 est inférieur à 14, ça applique ta MFC initiale de inf 14 : =$A4<14 ➯ VERT.
pour corriger la règle MFC de inf 14, voici la nouvelle formule :
=ET($A4<14;$A4<>"")
➯ les lignes 9 et 15 restent vierges (pas de couleur).
----------------------------------------------------------------------------------------------------------------
Partie B
dans ton classeur initial, ce que tu as fait pour Date et Heure (colonnes M et N),
ça ne va pas du tout ! :(
ta formule initiale en M4 : =SI(A4=0;0;SI(M4>0;M4;AUJOURDHUI()))
comme tu utilises la référence M4 dans une formule de la cellule M4, ça crée
une référence circulaire ! ce n'est pas bon : dans un classeur Excel correct,
il doit y avoir aucune référence circulaire !
ta formule initiale en N4 : =SI(A4=0;0;SI(N4>0;N4;MAINTENANT()))
comme tu utilises la référence N4 dans une formule de la cellule N4, ça crée
une référence circulaire ! donc idem : ce n'est pas bon.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ci-dessus, je viens de t'indiquer que ce n'est pas bon car tes 2 formules créent
des références circulaires ; ce n'est pas bon non plus pour ces raisons :
quand ça écrit la date ou l'heure, c'est fait par la formule, et la valeur changera
lors de la prochaine ouverture de ton classeur initial ; par exemple, tes dates
actuelles au 26/06/2023 deviendront demain : 27/06/2023 ; les heures aussi
changeront : heures où tu ouvres le classeur Excel !
un de ces tels changements peut être fait parfois immédiatement, parfois suite à
une réévaluation de la formule ; exemple : dans ton classeur initial, sélectionne
N14 ; appuie sur la touche F2 puis sur la touche Entrée : l'heure change.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
solution : écrire « en dur » les dates et heures ; c'est-à-dire que les dates et heures
ne doivent pas être mises par des formules ! il faut que les cellules en colonnes M
et N contiennent des valeurs, pas des formules !
c'est pour cela que j'ai supprimé toutes tes formules de M4:N15 ; ce que tu vois
sont des valeurs de dates et heures ; si nécessaire, je te laisse les corriger.
comment faire pour les nouvelles dates et heures ? exemple pour la ligne 15 :
en A15, saisis par exemple 6 ➯ en M15 et N15, ça écrit automatiquement les
valeurs de date et heure, « en dur » ; bien sûr, la ligne devient verte (MFC).
la cellule active est A15 ; appuie sur la touche Suppression pour effacer le 6
➯ ça vide la cellule A15, et aussi les 2 cellules M15 et N15 ; la couleur de la
ligne est de nouveau celle d'une ligne vierge (MFC).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ce que je viens de décrire est fait grâce au VBA : langage de programmation des
applications Microsoft Office (dont Excel) ; VBA = Visual Basic for Application ;
en VBA, on écrit des macros (sub ou function = sous-programme ou fonction).
ton fichier initial avait l'extension .xlsx ; un fichier .xlsx ne peut pas contenir de
macros ; c'est pour ça que j'ai converti ton fichier initial en fichier .xlsm : cette
extension correspond à ce type de fichier :
« Classeur Excel (prenant en charge les macros) »
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fais Alt F11 ➯ fenêtre "Microsoft Visual Basic pour Applications" ; pour abréger,
on dit que c'est « l'Éditeur Visual Basic » ; ici, sens de « éditer » = « modifier » ;
car dans cette fenêtre, c'est possible de créer et modifier un code VBA.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
côté droit, tu peux voir mon code VBA de Feuil3 (Contact) :
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .CountLarge > 1 Then Exit Sub
If .Column > 1 Then Exit Sub
If .Row < 4 Then Exit Sub
If .Value = "" Then .Offset(, 12).Resize(, 2) = Empty: Exit Sub
.Offset(, 12) = Date: .Offset(, 13) = Time
End With
End Sub
c'est un code événementiel, qui est exécuté lors de cet événement :
changement dans la feuille de calcul ; ceci car le nom de la sub est
Worksheet_Change.
Exit Sub = quitter la sub ; on quitte la sub :
* si la sélection comporte plus d'une cellule (test selon .CountLarge) ; donc la
suite du code sera exécutée seulement si une seule cellule est sélectionnée ;
quand il n'y a pas de sélection de plusieurs cellules, c'est la cellule active qui
est la sélection (donc : une seule cellule).
* si le n° colonne est > à 1 ➯ on quitte la sub si on n'est pas en colonne A ;
donc la suite du code est exécutée seulement si on est en colonne A ;
c'est le test selon .Column.
* si le n° ligne est < à 4 ➯ on quitte la sub si on est au-dessus de la ligne 4 ;
c'est car ta ligne d'en-têtes est la ligne n° 3, et tes lignes de données sont
juste en dessous, à partir de la ligne n° 4 ; c'est le test selon .Row.
* si la cellule est vide (test .Value = "") ; attention : juste avant de quitter la sub,
c'est cette ligne qui va effacer la date et l'heure si on supprime la valeur de la
colonne A (exemple : quand tu avais effacé le 6 de A15, ça avait effacé aussi
la date de M15 et l'heure de N15).
la ligne « .Offset(, 12) = Date: .Offset(, 13) = Time » est celle qui écrit « en dur »
la date et l'heure actuelles quand tu saisis une valeur en colonne A (et sous la
ligne 3) ; comme ce sont des valeurs qui sont écrites en colonnes M et N, les
dates et heures seront inchangées quand tu ouvriras ton classeur plus tard :
demain, ou après-demain, ou dans un mois, ou encore plus tard.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comme tu as vu où est placé mon code VBA, fais Alt F11 pour retourner sur
la fenêtre habituelle d'Excel.
----------------------------------------------------------------------------------------------------------------
si besoin, tu peux demander plus d'infos ou explications. :)
rhodo