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 :

Recherche d'une date avec find [XL-MAC 2011]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Artisan
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Artisan

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut Recherche d'une date avec find
    Bonjour à tous,

    je souhaiterais faire une recherche avec find pour une seule date, à partir d'un classeur dans un autre classeur, dans lequel se trouve une colonne ("A1:A500") remplie de toutes les dates de l'année dans l'ordre chronologique. Les cellules de ces dates sont en format personnalisées "j" c'est-à-dire qu'elle n'affiche que 7 pour le 7/10/2016 par exemple. Et je voudrais donc trouver l'adresse de la cellule recherchée.

    Voici la macro :

    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
     
    Sub Export()
     
        Dim Nom_Maitre As String
        Dim Nom_Esclave As String
        Dim datej As Date
        Dim x As Range
     
        Nom_Esclave = ActiveWorkbook.Worksheets("planning").Range("u1").Value
     
        datej = Worksheets("planning").Range("c1").Value
     
        Nom_Maitre = ActiveWorkbook.Name
     
        ' Chagement du classeur actif
        Workbooks(Nom_Esclave).Activate
     
        'Sheets("feuille2").Select
     
        With ActiveWorkbook.Worksheets("feuille2").Range("A1:A500")
        Set x = Range("A1:A500").Find(what:=datej, LookIn:=xlValues, lookat:=xlPart)
     
        End With
     
        x.Select
     
    End sub
    Voilà donc évidemment ça ne marche pas. Et le "x.Select" est surligné en jaune dans le déboguage.

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    La méthode Range.Find cherche une occurrence non parmi les valeurs, mais parmi les textes, tels qu'affichés.
    Il te faudrait donc rechercher format(datj,"d") et non datj
    Utiliser xlpart est par ailleurs à éviter : "27" pourrait par exemple (si présent en 1er) être trouvé pour un "7" recherché ainsi. Utilise xlwhole
    Enfin et surtout : utiliser la méthode Find dans un tel cas pourrait conduire à des résultats malheureux. Si tu recherches par exemple ainsi "7", le premier trouvé pourrait aussi bien être le 7 du mois de janvier que celui de n'importe quel autre mois.

    EDIT : un moyen de contourner cette difficulté, tout en utilisant la méthode Find, est cette petite astuce :

    - crée une feuille "tremplin" et donne à sa colonne A une largeur "confortable" (pour y afficher la totalité d'une date)
    et lance cette petite procédure (depuis la feuille source) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Dim datej As Date, S As Worksheet, T As Worksheet, x As Range
      datej = Worksheets("planning").Range("c1").Value
      Set S = Worksheets("Feuil2")
      Set T = Worksheets("tremplin")
      T.Cells.ClearContents
      S.Range("A1:A500").Copy Destination:=T.Range("A1")
      T.Columns(1).NumberFormat = Worksheets("planning").Range("c1").NumberFormat
      Set x = T.Range("A1:A500").Find(what:=datej, lookat:=xlWhole)
      If Not x Is Nothing Then S.Range("A" & x.Row).Select

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Si tu recherches dans xlFormulas, la recherche se fera sur le numéro de série et ne dépendra plus du format d'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set x = Range("A1:A500").Find(what:=datej, LookIn:=xlFormulas, lookat:=xlWhole)
    eric

  4. #4
    Membre averti
    Homme Profil pro
    Artisan
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Artisan

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut
    Alors j'avais déjà essayé avec xlFormulas mais ça ne donnait rien.

    Mais merci beaucoup Eric pour ton aide, et bravo unparia pour l'explication, je ne me suis pas servi du "Tremplin" car j'ai trop de feuilles déjà, mais j'ai modifié ma colonne de dates en format "d / mm" comme ça il n'y a plus d'ambiguïtés. Et je fais ma recherche avec Datej2 en string au même format.

    Merci infiniment et bonne journée !!!

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Alors j'avais déjà essayé avec xlFormulas mais ça ne donnait rien.
    Ah bon ? Pourtant...
    xlValues recherche dans .Text (ce qui est affiché), et xlFormulas dans ... .Formula qui est la valeur sur une saisie.
    Ne convient pas si c'est obtenu par formule donc, peut-être est-ce le cas.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre averti
    Homme Profil pro
    Artisan
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Artisan

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut
    Oui c'est vrai dans le même classeur ça marche, mais je ne sais pas pourquoi d'un classeur à l'autre ça ne marche pas!

    En fait, je prends la date dans un premier classeur et je la cherche dans le 2ème.
    A mon avis le problème doit être dans MacOs car quand j'affiche datej (donc la date cherchée pas en texte) avec Msgbox, il m'affiche "7/10/" je ne sais pas pourquoi l'année n'est pas affichée.
    Comment pourrais je reformater mon datej en jj/mm/aa stp?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Imbriquer un bout de code à mon projet (Rechercher Date avec Find-Méthode)
    Par Madwinn dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 04/02/2015, 09h45
  2. [Toutes versions] Confusion de résultats dans recherche des occurrences d'une valeur avec Find sur des dates
    Par iperkut dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/11/2011, 19h07
  3. Réponses: 3
    Dernier message: 12/07/2006, 09h13
  4. [Dates] Modifier une date avec 'substr'
    Par R'SKaP dans le forum Langage
    Réponses: 4
    Dernier message: 01/06/2006, 12h40
  5. Parser une date avec un format
    Par titoine1978 dans le forum C++
    Réponses: 15
    Dernier message: 03/04/2006, 11h46

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