IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Fonction SI sans action si FAUX


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    avril 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : avril 2016
    Messages : 37
    Points : 20
    Points
    20
    Par défaut Fonction SI sans action si FAUX
    Bonjour,

    Une cellule de mon tableau contient "Aujourdhui()" (D1 par exemple)
    Si A1 est renseigné:
    B1= D1 cette opération est donc datée du jour.

    Problème :
    le lendemain à l'ouverture du tableau, la date ci-dessus est modifiée !...

    D' ou :
    Si (B1=0;D1;?)

    Indépendamant du test sur la présence ou non d'une date dans la cellule, (= 0,<>0, <>" " ,>" " ... ?), soit dit en passant,
    comment l'empêcher de virer la date de la veille?
    A vous lire, merci d'avance et cordialement,
    JL

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 054
    Points : 51 943
    Points
    51 943
    Billets dans le blog
    100
    Par défaut
    Salut.

    Il n'y a pas de solution par formule, puisque AUJOURDHUI() est recalculé. Soit tu figes la date à la main en B1, soit par VBA, par exemple pour mettre la date du jour en B lorsque A est modifié.

    Je n'ai pas vu de copie d'écran du classeur, mais j'imagine une approche sur base d'un tableau structuré.

    Sur base du tableau suivant nommé Tableau1 contenant les colonnes Donnée et Date Modif, tu pourrais avoir le code suivant à placer dans le module de la feuille qui contient le tableau.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
      On Error GoTo Catch
     
      If Not Intersect(Target, Range("tableau1[Donnée]")) Is Nothing Then
        Application.EnableEvents = False
        Range("tableau1[Date Modif]")(Target.Row - Range("tableau1[#Headers]").Row).Value = Date
      End If
     
    Catch:
      Application.EnableEvents = True
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    avril 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : avril 2016
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Merci,
    Que représente "#Headers" ?
    Bon dimanche quand même !!...
    JL

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    février 2010
    Messages
    7 536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : février 2010
    Messages : 7 536
    Points : 14 416
    Points
    14 416
    Par défaut
    Bonjour à tous

    Dans un tableau structuré, ListObject (ils existent depuis la version 2003... soit plus de 17 ans) il y 3 zones :
    • ligne d'en-têtes (HeadersRowRange),
    • Corps (DataBodyRange)
    • ligne des totaux (TotalRowRange)


    On peut se référer par formule ou par VBA à
    • la ligne d'en-têtes par Tableau1[#En-têtes]
    • la ligne des totaux par Tableau1[#Totaux]
    • une colonne par son titre Tableau1[Donnée]
    • ...


    Dans le cas présent on aurait pu calculer la position du tableau (ligne) sur l'onglet par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("tableau1").ListObject.Range.Row
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("tableau1[#Headers]").Row
    Chris
    PowerQuery existe depuis plus de 10 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 054
    Points : 51 943
    Points
    51 943
    Billets dans le blog
    100
    Par défaut
    Pour compléter Chris, j'attire l'attention sur le fait que, en VBA, les noms des zones doivent être utilisées en anglais:
    • Tableau3[#En-têtes] devient Tableau3[#Headers];
    • Tableau3[#Totaux] devient Tableau3[#Totals];
    • Tableau3[#Tout] devient Tableau3[#All];
    • Tableau3[#Données] devient Tableau3[#Data].



    Il faut également noter que [#Données] peut être omis. Les références aux zones et aux colonnes peuvent être utilisés "comme" des plages nommées(*) en VBA, de sorte que l'on peut avoir Range("Tableau3") (équivalent usuel de Range("Tablea3[#Data]"), Range("Tableau3[#Headers]"), etc...

    L'avantage puissant que l'on retire de cela est que l'on peut programmer en VBA sans se soucier de l'emplacement du tableau dans le classeur ni du nombre de lignes dans le tableau. L'alias que constitue la référence structurée s'adapte aux modifications du tableau. Que l'on déplace le tableau, sur la même feuille ou sur une autre du classeur, que l'on insère ou intervertisse des colonnes n'impacte en rien le code produit. C'est un gage de rapidité, de facilité, de fiabilité par rapport aux anciennes techniques de programmation.




    (*) Je précise au passage qu'une plage nommée, ça n'existe pas. Ce qui existe, c'est une formule nommée qui pointe vers une plage. Savoir cela élargit donc le concept de "nom" à des formules qui peuvent renvoyer autre chose que des plages, et qui peuvent utiliser des références absolues ou relatives, ainsi que des références structurées. Ce sera intéressant lorsqu'il faudra s'appuyer sur des tableaux structurés pour utiliser des outils qui n'acceptent pas les références structurées mais qui acceptent les plages nommées (MFC, validation, filtre avancé, ...)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    avril 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : avril 2016
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Merci de toutes ces précisions, je me coucherai moins bête !
    Cordialement
    JL

  7. #7
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA
    Inscrit en
    septembre 2005
    Messages
    1 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 773
    Points : 3 240
    Points
    3 240
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous,

    J'arrive peut-être après la bataille mais je n'ai pas pu résister à y mettre mon grain de sel


    Outre les explications de Pierre et Chris aussi claires que complètes, il existe une astuce toute simple et peu usitée.

    la Combinaison de touche [Ctrl] + [;] permet de mettre en DUR la date du jour dans une cellule (pas de recalcul)

    J'ai un tableau de suivi des anomalies où j'utilise ce raccourcis clavier qui me fait gagner un temps important

    ne sachant pas trop ce que tu cherches à faire je me suis dit que peut-être cette solution résolverait ton problème.

    A bientôt

    PS : Messieurs Vos explications ont le mérite de m'avoir permis de comprendre des choses que j'avais mal comprise
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    avril 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : avril 2016
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Merci de ce complément d'information : ça peut servir!
    Cordialement
    JL

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 054
    Points : 51 943
    Points
    51 943
    Billets dans le blog
    100
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    [...]
    J'arrive peut-être après la bataille mais je n'ai pas pu résister à y mettre mon grain de sel [...]
    Et tu as bien fait. C'est à force de taper sur le clou que ça finira par rentrer, et perso, j'utilise aussi très souvent ce raccourci pour la date, ainsi que CTRL+: pour l'heure courante, notamment dans le fichier de pointage de mes prestations. Avantage non négligeable, ça permet de ne pas utiliser VBA si on ne fait que cela en VBA...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Appeler une fonction d'un script sans action particulière
    Par blanchonvincent dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/05/2007, 22h29
  2. Affichage de données sans action ?
    Par SnorkyTouch dans le forum Struts 1
    Réponses: 1
    Dernier message: 12/10/2006, 14h14
  3. Réponses: 4
    Dernier message: 19/04/2006, 16h03
  4. Réponses: 4
    Dernier message: 02/06/2004, 16h35
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo