XL 2021 Formule générée par IA ne fonctionne pas.

Phoenix23

XLDnaute Occasionnel
Bonjour à tous,
Je viens de tester l'IA qui soit disant est le top du top...
Ce que je demande à ce génie :
Une formule qui fait que lorsque je clique sur une cellule vide A1 se mette automatiquement la date d'aujourd'hui ( en fait je ne pensais même pas que cela soit possible), bref, elle sort la formule suivante:
=SI(ESTVIDE(A1),ESTVIDE(A2)),AUJOURD'HUI (),A2).
Qui ne fonctionne pas...
La formule à été recopiée à l'identique.
Une idée svp sur la correction à apporter.
D'avance merci
 
Solution
Re argyronet
Je joins un fichier, feuille 2024 les explications espérant avoir été suffisamment explicite ...
Bonjour,

Déjà, pour vous désespérer :p, oui, vous êtes tenu de passer par des macros.

D’ailleurs, votre classeur est au format xlsm et il y a des procédures dedans...
Concernant votre formule 2L, il suffit d'écrire :

Code:
=SI(ESTNUM(B324);2;"")

puisque votre format de cellule est subséquent au fait que la cellule est potentiellement nantie d'un nombre...

Sinon, pour la date auto, voici ce que je vous propose :

Dans un module, vous écrivez ou recopiez :
VB:
Option Explicit

Public Const DATE_TITRE                                       As String = "DATE_TITRE"...

Phoenix23

XLDnaute Occasionnel
Bonsoir argyronet.
Merci pour votre explication.
Comme vous l'aurez probablement remarqué je ne suis pas très doué.
Et je mettais mis à rêver qu'il existait peut être ( une formule, méthode pas trop compliquée pour un tout, tout petit utilisateur d'excel)
qui permettait lorsque je clique dans une cellule vide m'aurait insérée et figée automatiquement la date "jour, mois, année" dans la cellule concernée et dans la cellule du dessous, le lendemain , ou 2,3 jours après aurait renouvelé la même chose.
Un peu du style que la formule =MAINTENANT(), sauf que pour celle ci la date change à chaque réouverture du classeur.
Bref j'étais parti dans un truc qui me dépasse .....
Cordialement.
 

argyronet

XLDnaute Nouveau
Bonsoir argyronet.
Merci pour votre explication.
Comme vous l'aurez probablement remarqué je ne suis pas très doué.
Et je mettais mis à rêver qu'il existait peut être ( une formule, méthode pas trop compliquée pour un tout, tout petit utilisateur d'excel)
qui permettait lorsque je clique dans une cellule vide m'aurait insérée et figée automatiquement la date "jour, mois, année" dans la cellule concernée et dans la cellule du dessous, le lendemain , ou 2,3 jours après aurait renouvelé la même chose.
Un peu du style que la formule =MAINTENANT(), sauf que pour celle ci la date change à chaque réouverture du classeur.
Bref j'étais parti dans un truc qui me dépasse .....
Cordialement.
Bonsoir,

Si vous précisiez exactement quel est votre projet et souhaits, on est là pour vous aider à y parvenir mais Excel a ses limites tout de même.
Mettre une date figée en dessous d'une cellule est tout à fait faisable avec formule mais tout dépend où et comment est structuré votre classeur : objectif, ne pas écraser une formule existante.
 

TooFatBoy

XLDnaute Barbatruc
Une proposition en pièce jointe.


Pour créer une feuille pour une nouvelle année :
1- Dupliquer la feuille "Modèle",
2- Nommer l'onglet avec l'année désirée. ( /!\ OBLIGATOIRE !!! )
3- Changer la couleur de l'onglet.
4- Ajouter une ligne au tableau (*).
5- Changer la couleur de la ligne d'en-têtes.

/!\ Si La première ligne de données prend la couleur de la ligne d'en-têtes (par exemple si les étapes 4 et 5 sont interverties), sélectionner la partie données du tableau et choisir "Aucun remplissage" dans le format de remplissage des cellules.


(*) Pour ajouter une ligne au tableau :
- Si le tableau est vide, cliquer sous l'en-tête "Date".​
- Si le tableau n'est pas vide :​
- soit cliquer sous la dernière cellule de la colonne "Date" du tableau,​
- soit sélectionner la dernière cellule de la dernière colonne du tableau et appuyer sur <Tab>.​
 

Pièces jointes

  • Déshumidificateur - (TFB-001).xlsm
    141.1 KB · Affichages: 5

argyronet

XLDnaute Nouveau
Re argyronet
Je joins un fichier, feuille 2024 les explications espérant avoir été suffisamment explicite ...
Bonjour,

Déjà, pour vous désespérer :p, oui, vous êtes tenu de passer par des macros.

D’ailleurs, votre classeur est au format xlsm et il y a des procédures dedans...
Concernant votre formule 2L, il suffit d'écrire :

Code:
=SI(ESTNUM(B324);2;"")

puisque votre format de cellule est subséquent au fait que la cellule est potentiellement nantie d'un nombre...

Sinon, pour la date auto, voici ce que je vous propose :

Dans un module, vous écrivez ou recopiez :
VB:
Option Explicit

Public Const DATE_TITRE                                       As String = "DATE_TITRE"    'cellule nommée du titre de la date

Public Function AjouterProchaineDate(ByRef TexteAAfficher As Variant) As Boolean
Const MSG_WZ                                           As String = "C'est le WE, on relève pas !"
Const MSG_INVALIDE                                     As String = "Pas de date valide en "
Dim lngDerniereLigne                                   As Long
Dim dtmDerniereDate                                    As Date    'Date précédente
Dim dtmProchaineDate                                   As Date    'Date suivante
Dim strDerniereDate                                    As String    'Cellule précédente
Dim vntValeurCellule                                   As Variant
Dim intJourSemaine                                     As Integer

Dim blnOnAfficheLaDate                                 As Boolean
Dim intEcartJours                                      As Integer

    With Application
        .ScreenUpdating = False
        'Décalage de jours
        intEcartJours = 1
        'On cherche la dernière cellule
        lngDerniereLigne = Range(DATE_TITRE).End(xlDown).Row
        'on vérifie que c'est une date
        vntValeurCellule = Cells(lngDerniereLigne, Range(DATE_TITRE).Column).Value
On_Continu:
        'S'il y a bien une date à la dernière ligne
        If IsDate(vntValeurCellule) Then
            dtmDerniereDate = CDate(vntValeurCellule)
            dtmProchaineDate = dtmDerniereDate + intEcartJours

            'Quel jour on est aijourd'hui
            intJourSemaine = Weekday(dtmProchaineDate)
            Select Case intJourSemaine
                    'Lundi à vendredi
                Case 2 To 6
                    TexteAAfficher = dtmProchaineDate
                    blnOnAfficheLaDate = True
                Case Else
                    'samedi/dimanche
                    TexteAAfficher = MSG_WZ
                    blnOnAfficheLaDate = False
            End Select
        Else
            If vntValeurCellule = MSG_WZ Then
                vntValeurCellule = Cells(lngDerniereLigne - intEcartJours, Range(DATE_TITRE).Column).Value
                intEcartJours = intEcartJours + 1
                GoTo On_Continu
            Else
                TexteAAfficher = MSG_INVALIDE & Cells(lngDerniereLigne, Range(DATE_TITRE).Column).Address(0, 0, xlA1)
                blnOnAfficheLaDate = False
            End If
        End If

        AjouterProchaineDate = blnOnAfficheLaDate
        .ScreenUpdating = True
    End With

End Function

Dans la classe VBA de la feuille cible, vous écrivez ou recopiez :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim strTexteAAfficher                                  As String

    If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then
        'si c'est une selection multiple, on fait rien
    Else
        If IsEmpty(Target.Value) And IsEmpty(Target.Offset(-1, 0).Value) Then
            'si on est ailleur dans la même colonne mais qu'il n'y a pas de date
        Else
            'sinon...
            Select Case Target.Column
                Case Range(DATE_TITRE).Column
                    'on vérifie qu'on clique bien dans la colonne des dates
                    If IsEmpty(Target.Value) Then
                        'si la cellule est vide
                        If AjouterProchaineDate(strTexteAAfficher) Then
                            If IsDate(strTexteAAfficher) Then
                                Target.Value = CDate(strTexteAAfficher)
                            End If
                        Else
                            Target.Value = strTexteAAfficher
                        End If
                    End If
                Case Else
            End Select
        End If
    End If
End Sub

Ensuite, votre formule en colonne C se complexifie un peu :
Code:
=SI(B323="";"";B323-B322)
devient alors
Code:
=SI(B323="";"";SI(ESTERREUR(DATE(ANNEE(B323);MOIS(B323);JOUR(B323)));"";B323-SI(ESTNUM(CNUM(B322));B322;DECALER(B322;-(SI(ET(C322="";C321="");2;1));0))))

Je ne sais pas si ça répond à vos attentes mais il y aura sans doute des adaptations à faire en fonction de ce que vous souhaitez.
De ma vision des choses, il faudrait rendre générique le code de tel sorte à ce qu'il s'adapte à ni'importe quel feuille 2020...2030 mais ça peut complexifier grandement les choses si vous n'êtes pas prêt à coder.

Il est vrai que pour votre cas et vu la fréquence à laquelle vous remplissez le classeur, un simple :
CTRL+; dans la cellule vide de la colonne B peut suffire...

Phoenix23.gif
 

Phoenix23

XLDnaute Occasionnel
Bonjour,

Déjà, pour vous désespérer :p, oui, vous êtes tenu de passer par des macros.

D’ailleurs, votre classeur est au format xlsm et il y a des procédures dedans...
Concernant votre formule 2L, il suffit d'écrire :

Code:
=SI(ESTNUM(B324);2;"")

puisque votre format de cellule est subséquent au fait que la cellule est potentiellement nantie d'un nombre...

Sinon, pour la date auto, voici ce que je vous propose :

Dans un module, vous écrivez ou recopiez :
VB:
Option Explicit

Public Const DATE_TITRE                                       As String = "DATE_TITRE"    'cellule nommée du titre de la date

Public Function AjouterProchaineDate(ByRef TexteAAfficher As Variant) As Boolean
Const MSG_WZ                                           As String = "C'est le WE, on relève pas !"
Const MSG_INVALIDE                                     As String = "Pas de date valide en "
Dim lngDerniereLigne                                   As Long
Dim dtmDerniereDate                                    As Date    'Date précédente
Dim dtmProchaineDate                                   As Date    'Date suivante
Dim strDerniereDate                                    As String    'Cellule précédente
Dim vntValeurCellule                                   As Variant
Dim intJourSemaine                                     As Integer

Dim blnOnAfficheLaDate                                 As Boolean
Dim intEcartJours                                      As Integer

    With Application
        .ScreenUpdating = False
        'Décalage de jours
        intEcartJours = 1
        'On cherche la dernière cellule
        lngDerniereLigne = Range(DATE_TITRE).End(xlDown).Row
        'on vérifie que c'est une date
        vntValeurCellule = Cells(lngDerniereLigne, Range(DATE_TITRE).Column).Value
On_Continu:
        'S'il y a bien une date à la dernière ligne
        If IsDate(vntValeurCellule) Then
            dtmDerniereDate = CDate(vntValeurCellule)
            dtmProchaineDate = dtmDerniereDate + intEcartJours

            'Quel jour on est aijourd'hui
            intJourSemaine = Weekday(dtmProchaineDate)
            Select Case intJourSemaine
                    'Lundi à vendredi
                Case 2 To 6
                    TexteAAfficher = dtmProchaineDate
                    blnOnAfficheLaDate = True
                Case Else
                    'samedi/dimanche
                    TexteAAfficher = MSG_WZ
                    blnOnAfficheLaDate = False
            End Select
        Else
            If vntValeurCellule = MSG_WZ Then
                vntValeurCellule = Cells(lngDerniereLigne - intEcartJours, Range(DATE_TITRE).Column).Value
                intEcartJours = intEcartJours + 1
                GoTo On_Continu
            Else
                TexteAAfficher = MSG_INVALIDE & Cells(lngDerniereLigne, Range(DATE_TITRE).Column).Address(0, 0, xlA1)
                blnOnAfficheLaDate = False
            End If
        End If

        AjouterProchaineDate = blnOnAfficheLaDate
        .ScreenUpdating = True
    End With

End Function

Dans la classe VBA de la feuille cible, vous écrivez ou recopiez :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim strTexteAAfficher                                  As String

    If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then
        'si c'est une selection multiple, on fait rien
    Else
        If IsEmpty(Target.Value) And IsEmpty(Target.Offset(-1, 0).Value) Then
            'si on est ailleur dans la même colonne mais qu'il n'y a pas de date
        Else
            'sinon...
            Select Case Target.Column
                Case Range(DATE_TITRE).Column
                    'on vérifie qu'on clique bien dans la colonne des dates
                    If IsEmpty(Target.Value) Then
                        'si la cellule est vide
                        If AjouterProchaineDate(strTexteAAfficher) Then
                            If IsDate(strTexteAAfficher) Then
                                Target.Value = CDate(strTexteAAfficher)
                            End If
                        Else
                            Target.Value = strTexteAAfficher
                        End If
                    End If
                Case Else
            End Select
        End If
    End If
End Sub

Ensuite, votre formule en colonne C se complexifie un peu :
Code:
=SI(B323="";"";B323-B322)
devient alors
Code:
=SI(B323="";"";SI(ESTERREUR(DATE(ANNEE(B323);MOIS(B323);JOUR(B323)));"";B323-SI(ESTNUM(CNUM(B322));B322;DECALER(B322;-(SI(ET(C322="";C321="");2;1));0))))

Je ne sais pas si ça répond à vos attentes mais il y aura sans doute des adaptations à faire en fonction de ce que vous souhaitez.
De ma vision des choses, il faudrait rendre générique le code de tel sorte à ce qu'il s'adapte à ni'importe quel feuille 2020...2030 mais ça peut complexifier grandement les choses si vous n'êtes pas prêt à coder.

Il est vrai que pour votre cas et vu la fréquence à laquelle vous remplissez le classeur, un simple :
CTRL+; dans la cellule vide de la colonne B peut suffire...

Regarde la pièce jointe 1208428
Bonjour argironet.
Tout d'abord je tiens à m'excuser platement du retard de ma réponse.
Je vais recopier votre solution, si elle ne vient pas à trop me compliquer la vie, elle me conviendrait parfaitement.
Il n'empêche que je rends également note du raccourci qui est à première vu tout aussi simple pour moi .
Je vous remercie pour votre aide précieuse.
Bon dimanche.
Cordialement.
 

argyronet

XLDnaute Nouveau
Bonjour à tous,

L'avantage des forums est que l'on peut suggérer plusieurs solutions...
Libre au demandeur de choisir celle qui lui convient le mieux.

Si je suis le fil conducteur des 2 derniers messages (tristounets, j'avoue :rolleyes:)...

- j'ajouterais que le CTRL+; n'est pas suffisant, il faut le greffer d'un CTRL+: précédé d'un espace pour avoir l'heure, élément qui est requis dans la cellule... Sinon, on obtient 0h00 et le calcul sera C est faux.

- les forums ne sont pas faits pour acclamer ou ovationner la foule ; si vous avez posté une solution que vous croyez meilleure que celle les autres, tant mieux ; c'est au demandeur de juger si elle lui convient.
 

vgendron

XLDnaute Barbatruc
bonjour
@argyronet
merci pour tes leçons de morale après 4 messages sur ce forum...

proposer une solution qui a déjà été donnée quelques posts plus haut, n'en fait pas une nouvelle solution..
le problème ici est que le demandeur ne lit (voit) pas tous les messages
c'est le risque d'un forum, on peut vite être noyé par toutes les réponses..

dans mon message que tu trouves "tristounet", je ne lui demandais pas de noter MA solution (j'en ai un peu rien à faire), juste de ne pas noter SON post comme solution.. parce qu'un autre utilisateur ayant le meme problème sera amené à cliquer directement sur la solution.. et.. il ne trouverait rien..
 

TooFatBoy

XLDnaute Barbatruc
T'as pas compris mon message #25, si c'est à ce message que tu fais allusion (impossible de le savoir puisqu'il n'y a pas de citation...). 😉

C'est toi qui dis :
De ma vision des choses, il faudrait rendre générique le code de tel sorte à ce qu'il s'adapte à ni'importe quel feuille 2020...2030 mais ça peut complexifier grandement les choses si vous n'êtes pas prêt à coder.
donc je dis simplement que dans ma proposition ça s'adapte.

Mais cela, le demandeur ne peut pas le savoir car je pense qu'il ne voit pas mes messages.
C'est tout. 😉
 
Dernière édition:

argyronet

XLDnaute Nouveau
Merci pour vos retours respectifs ; je ne fais la morale à personne ; j'ai passé l'âge.

#27 Je connais Excel depuis sa naissance et tous les raccourcis clavier. Je n'ai fait qu'appuyer votre suggestion initiale sans m'en accaparer puisque c’était la conclusion de mon dernier post.
Sans doute aurais-je dû ajouter : « ainsi que suggéré par vgendron »...

#28 Et effectivement, je suppose que le demandeur n'a pas vu toutes les réponses, après coup.
 

Discussions similaires

Réponses
18
Affichages
829

Statistiques des forums

Discussions
315 235
Messages
2 117 632
Membres
113 215
dernier inscrit
guillet