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

Macros et VBA Excel Discussion :

RANGE.FIND ne fonctionne pas pour une DATE [XL-2010]


Sujet :

Macros et VBA Excel

  1. #21
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Au vu de ces échanges, comme ceux nombreux par le passé, je persiste à croire, comme l'ami Theze qu'il reste plus facile de rechercher un numéro de série.
    A condition d'être sûr que la cellule contient un nombre entier.
    Sinon, mieux vaut passer par un équivalent de la valeur affichée formatée.

    C'est pile-ou-face.

    Mais je suis d'accord que les dates sont difficilement compatibles avec les égalités.
    Lorsqu'on le peut, mieux vaut utiliser des inégalités ou des bornes (ce qui n'est pas possible avec un Find).

    Ne pas oublier qu'il y a d'autres solutions de recherche : sans aller jusqu'à faire une boucle, il reste la solution d'utiliser des fonctions Excel (MATCH ou VLOOKUP) qui ont plus de possibilités dans ce domaine.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  2. #22
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    A condition d'être sûr que la cellule contient un nombre entier.
    C'est mon hypothèse de départ,

    Le champ de recherche ne contiendrait que des nombres au format date.
    Le changement de format les considérerait en Long.
    Et la recherche devient alors plus facile.
    Certes, la rigueur des données est, comme toujours, fondamentale.
    Ce qui n'empêche pas une restitution au format initial en fin de traitement.

    Je développe actuellement un planning de gestion de ressources ETP pour mon entité.
    Honnêtement, je ne me plains pas de considérer ce processus.

    C'est juste mon avis.
    Et j'accepte, bien entendu, volontiers l'existence d'autres processus.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  3. #23
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Je viens de penser a une technique qui permettrait de trouver facilement une date avec FIND.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     'On recherche d'abord une valeur de type Date avec xlFormulas et xlValues
       what = CDate(LaDate)
       Set Resultat = Rng.Find(what:=what, LookIn:=xlFormulas, lookat:=xlWhole)
       If Resultat Is Nothing Then Set Resultat = Rng.Find(what:=what, LookIn:=xlValues, lookat:=xlWhole)
     
      'On recherche ensuite une valeur de type String avec xlFormulas et xlValues
       what = CStr(LaDate)
       If Resultat Is Nothing Then Set Resultat = Rng.Find(what:=what, LookIn:=xlFormulas, lookat:=xlWhole)
       If Resultat Is Nothing Then Set Resultat = Rng.Find(what:=what, LookIn:=xlValues, lookat:=xlWhole)
     
       If Resultat Is Nothing Then
        MsgBox "Vraiment aucun resultat"
       Else
       Resultat.Select
       End If
    Qu'en pensez-vous?
    Cordialement

    Docmarti.

  4. #24
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour Docmarti,

    En fait, tu balaies tous les cas de figure.
    Les débats, anciens comme récents, portent justement sur la méthode à préconiser.

    Personnellement, je ne suis pas très fan des conditions répétées. (Pas très fun)
    J'admets néanmoins que cette méthode peut aboutir.
    Et c'est juste mon avis.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  5. #25
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Salut.

    Quand je ne peux pas faire autrement qu'utiliser Find pour retrouver des dates, j'utilise Application.FindFormat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro1()
      Dim r As Range
      Dim d As Date
     
      d = DateSerial(2018, 4, 16)
     
      Application.FindFormat.NumberFormat = "m/d/yyyy"
      Set r = Range("b1:b38").Find(What:=Format(d, "m/d/yyyy"), After:=Range("b1"), LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=True)
      If Not r Is Nothing Then MsgBox r.Address
    End Sub

    Nom : 2019-10-22_182129.png
Affichages : 314
Taille : 11,5 Ko


    Attention à bien préciser toutes les options, car FIND "singe" l'utilisation de la boite de dialogue de recherche d'Excel, et les options utilisées antérieurement restent actives.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    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. #26
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonsoir Pierre,

    Je ne connaissais pas. Bien!
    Je me posais la question quant à l'adaptation de ce processus à une Textbox. Il faudrait alors considérer la fonction DateValue.
    A priori, il n'y aurait pas de problème.
    A l'occasion, je testerai à partir de demain.

    Bonne soirée à toi. Bonne soirée au Forum.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  7. #27
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    comme dit MarcelG
    Le champ de recherche ne contiendrait que des nombres au format date.
    Le changement de format les considérerait en Long.
    Et la recherche devient alors plus facile.
    Certes, la rigueur des données est, comme toujours, fondamentale.
    Ce qui n'empêche pas une restitution au format initial en fin de traitement.
    pour moi, une date valide dans Excel ne peut être qu'un numéro de série, le reste n'est que formatage ! Mais bon, ça n'engage que moi

  8. #28
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour le Forum,

    Theze,

    J'ai testé la proposition de Pierre sur un formulaire.

    Code fonctionnel, avec une déclaration, comme je le pressentais, en Long

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim d As Long
    d = DateValue(Me.TextBox1)
    Quelques remarques:
    - Il y a inversion des formats entre le code ("m/d/yyyy") et la feuille de travail ("d/m/yyyy").
    La cause en est, je pense, la gestion des dates américaines
    - La fonctionnalité de la propriété FindFormat est, comme le reporte l'aide Microsoft et comme il est démontré ici, le format de recherche.
    Ce qui signifie qu'elle peut servir à tous les formats de cellules (police, couleur...). Et donc, au passage, est elle affectée à l'objet Application. Je la trouve donc très utile.
    - L'aide Microsoft quant à la fonction DateValue indique une
    Renvoie une Variante (Date
    J'aurais plutôt pensé à Long, comme d'ailleurs pour DateSerial

    Conclusion: 1 élément de plus dans ma documentation, partie "Dates".
    Merci.

    Bonne journée à tous.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  9. #29
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Excel, un boulet, preuve en est, j'ai implémenté la solution de Pierre et voici le résultat


    Avec
    oRgFind.Address = $B$3:$D$3
    dDate = 23/10/2019

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oRgFind.Find(What:=Format(dDate, "m/d/yyyy"), LookIn:=xlValues, _
    LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=True)
    Renvoie nothing

    J'ai également essayé en ajoutant After:=oRgFind.Columns(1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oRgFind.Find(What:=Format(dDate, "m/d/yyyy"), After:=oRgFind.Columns(1), LookIn:=xlValues, _
    LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=True)
    Toujours Nothing

    Nom : crit1.png
Affichages : 346
Taille : 42,5 Ko

    Nom : crit2.PNG
Affichages : 321
Taille : 26,7 Ko
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  10. #30
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Tu as mis la ligne Application.FindFormat = "m/d/yyyy"? Je ne la vois pas dans ton code.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    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...
    ---------------

  11. #31
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour Pierre et merci pour ton aide

    Si elle y est après dDate = DateSerial...
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  12. #32
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Si je peux me permettre.

    La partie du code reportée me laisse perplexe.
    Connais-tu la fonction DateValue?

    Quand bien même.
    Il faut toujours prendre un peu de recul par rapport aux codes proposés.
    Tu compliques en effet.

    Si tu recherches la date du jour, écrire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set r = Range("b1:b38").Find(What:=Format(Date, "m/d/yyyy")........
    ferait retourner le même résultat, non? (Je viens de tester)

    D'autre part, l'affectation de la variable à l'objet Range m'interpelle quelque peu.
    C'est justement la ligne mise ici en exergue par le debugger.

    Pourrais-tu retourner ta procédure en entier.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  13. #33
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    En partant du code de Pierre et avec les dates comme tu les présentes en B3:C3, l'adresse C3 m'est bien retournée (pour le 23/10/2019). Ici, j'utilise "NumberFormatLocal" puisque c'est ton format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim LaDate As Date
     
        Set Plage = Range("B3:C3")
     
        LaDate = Date
     
        'format France
        Application.FindFormat.NumberFormatLocal = "jj/mm/aaaa"
     
        Set Cel = Plage.Find(LaDate, , xlValues, xlWhole)
     
        If Not Cel Is Nothing Then MsgBox Cel.Address(0, 0)
     
    End Sub

  14. #34
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Hello Macel

    Il n'est même pas nécessaire d'utiliser Format() dans la méthode Find() puisqu'on initialise le type de recherche souhaitée avec FindFormat !

  15. #35
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Hello,

    Sur mon poste.

    La date du jour est en B3.

    Ce code est bien effectif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro1()
      Dim r As Range
     
      Application.FindFormat.NumberFormat = "m/d/yyyy"
      Set r = Range("b1:b38").Find(What:=Date, After:=Range("b1"), LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=True)
      If Not r Is Nothing Then MsgBox r.Address
    End Sub
    Si l'on considère ton processus en intégrant le paramètre SearchFormat, le résultat est différent selon la valeur qui lui est affectée. Ce qui est logique mais le résultat n'est pas celui que j'attendrais.


    Avec SearchFormat:=True, la cellule n'est pas trouvée


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro3()
     
    Dim r As Range
     
     Dim LaDate As Date
      LaDate = Date
     
      Application.FindFormat.NumberFormatLocal = "jj/mm/aaaa"
      Set r = Range("b1:b38").Find(What:=LaDate, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchFormat:=True)
      If Not r Is Nothing Then MsgBox r.Address
    End Sub

    Avec SearchFormat:=False, la cellule est trouvée


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro3()
     
    Dim r As Range
     
     Dim LaDate As Date
      LaDate = Date
     
      Application.FindFormat.NumberFormatLocal = "jj/mm/aaaa"
      Set r = Range("b1:b38").Find(What:=LaDate, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchFormat:=False)
      If Not r Is Nothing Then MsgBox r.Address
    End Sub
    Il y interférence entre le paramètre SearchFormat et la propriété de l'application FindFormat.
    S'il est omis, le paramètre SearchFormat est considéré à False.
    Alors que dans le code de Pierre, SearchFormat est précisée à True.

    Je pencherais pour sa déclaration. Mais ces constatations m'interpellent.

    A te lire.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  16. #36
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Bonjour Marcel,

    La recherche par le formatage me semble bien perfectible car avec un formatage en date longue, plus moyen de la trouver !!!
    Que ce soit avec "NumberFormatLocal" ou "NumberFormat" et que "SearchFormat" soit à True ou False !
    Sitôt remis en date courte, elle est trouvée dans pour six des huit cas ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim LaDate As Date
     
        Set Plage = Range("B3:C3")
        LaDate = Date
     
        Application.FindFormat.Clear
        Application.FindFormat.NumberFormat = "m/d/yyyy"
     
        Set Cel = Plage.Find(Format(LaDate, "m/d/yyyy"), , xlValues, xlWhole, , , , , True)
        If Not Cel Is Nothing Then MsgBox "Test 1 : " & Cel.Address(0, 0)
     
        Set Cel = Plage.Find(Format(LaDate, "m/d/yyyy"), , xlValues, xlWhole, , , , , False)
        If Not Cel Is Nothing Then MsgBox "Test 2 : " & Cel.Address(0, 0)
     
        Set Cel = Plage.Find(LaDate, , xlValues, xlWhole, , , , , True)
        If Not Cel Is Nothing Then MsgBox "Test 3 : " & Cel.Address(0, 0)
     
        Set Cel = Plage.Find(LaDate, , xlValues, xlWhole, , , , , False)
        If Not Cel Is Nothing Then MsgBox "Test 4 : " & Cel.Address(0, 0)
     
        Application.FindFormat.Clear
        Application.FindFormat.NumberFormatLocal = "jj/mm/aaaa"
     
        Set Cel = Plage.Find(Format(LaDate, "m/d/yyyy"), , xlValues, xlWhole, , , , , True) 'pas trouvée !
        If Not Cel Is Nothing Then MsgBox "Test 5 : " & Cel.Address(0, 0)
     
        Set Cel = Plage.Find(Format(LaDate, "m/d/yyyy"), , xlValues, xlWhole, , , , , False)
        If Not Cel Is Nothing Then MsgBox "Test 6 : " & Cel.Address(0, 0)
     
        Set Cel = Plage.Find(LaDate, , xlValues, xlWhole, , , , , True) 'par trouvée !
        If Not Cel Is Nothing Then MsgBox "Test 7 : " & Cel.Address(0, 0)
     
        Set Cel = Plage.Find(LaDate, , xlValues, xlWhole, , , , , False)
        If Not Cel Is Nothing Then MsgBox "Test 8 : " & Cel.Address(0, 0)
     
    End Sub
    Résultat des courses, je préfère la méthode que j'ai présentée dans ma première intervention, celle que nous utilisons tous les deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim LaDate As Date
        Dim F As String
     
        Set Plage = Range("B3:C3")
     
        F = Plage.NumberFormat
        Plage.NumberFormat = "General"
     
        LaDate = Date
     
        Set Cel = Plage.Find(CLng(LaDate), , xlValues, xlWhole)
        If Not Cel Is Nothing Then MsgBox Cel.Address(0, 0)
     
        Plage.NumberFormat = F
     
    End Sub

  17. #37
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour Theze, Bonjour le Forum,

    Même constat sur mon poste ce matin.
    OK

    Passe une bonne journée, Bonne journée au Forum.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  18. #38
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Merci à tous pour votre aide mais définitivement Excel n'est pas mon copain

    Cette fois, c'est NumberFormat qui fait des siennes puisqu'il ne fait pas son job sur toutes les dates


    Nom : crit1.PNG
Affichages : 270
Taille : 41,9 KoNom : crit2.PNG
Affichages : 248
Taille : 20,7 Ko
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  19. #39
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    c'est NumberFormat qui fait des siennes puisqu'il ne fait pas son job sur toutes les dates

    Et pour cause, D3 est une chaine de caractères.

    Si les données dates sont en B1:B4, sur mon poste ce code est effectif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub Test2()
     
    Dim Plage As Range
    Dim leformat As String
    Dim C As Range
     
    Set Plage = Range("B1:B4")
     
    With Plage
            leformat = .NumberFormat
            .NumberFormat = "General"
            Set C = .Find(what:=CLng(Date), LookIn:=xlValues, lookat:=xlWhole)
            .NumberFormat = leformat
    End With
     
    If Not C Is Nothing Then
            MsgBox C.Address(0, 0)
            Set C = Nothing
    End If
     
    Set Plage = Nothing
     
    End Sub

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  20. #40
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    MarcelG,
    Je ne parle pas de D3 mais de C3 qui reste au format date au contraire de B3 qui lui passe en Long.
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/07/2017, 17h06
  2. Réponses: 3
    Dernier message: 17/06/2016, 15h44
  3. [XL-2007] Formule qui ne fonctionne pas pour une certaine ligne.
    Par ESVBA dans le forum Excel
    Réponses: 11
    Dernier message: 20/01/2016, 11h56
  4. Réponses: 2
    Dernier message: 02/02/2011, 10h23
  5. Fonction DISTINCT ne fonctionne pas sur une date
    Par cramouille dans le forum Access
    Réponses: 5
    Dernier message: 25/10/2006, 15h42

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