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 :

Problème avec la méthode find


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Par défaut Problème avec la méthode find
    Bonjour,

    J'ai besoin pour un projet sur excel de trouver une date précise sur une ligne(la première), cette ligne contient toutes les dates de l'année.

    J'utilise donc la méthode find de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheets("Feuil1").Range("A1:NZ1").find(dtmMaDate).select
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Rows(1).find(dtmMaDate).select
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("1:1").find(dtmMaDate).select
    Dans les trois cas, le programme semble fonctionner que lorsque ça l'arrange... sur mon module2 j'avais ce problème au bout de plusieurs essais de mon code ça se mettait à me rendre l'erreur suivante : "Erreur '1004': La méthode Select de la classe Range à échouée". Je redemarrais alors mon classeur et ça fonctionnait à nouveau.
    Maintenant le problème se produit sur mon module 3 sauf que cette fois c'est totalement aléatoire. (par exemple, ça ne marchait pas il y a 1h, là je viens de ressayer, ça a marché, puis j'essaye encore, et hop à nouveau l'erreur, je n'ai pas fermé le classeur entre deux...) .

    Quelqu'un à t-il déjà eu ce problème ? Une idée d'où peut venir l'erreur ?

    J'ai bien entendu essayer de rajouter des arguments à la méthode find mais il semblerait que le problème vienne du range...

    Merci à tout ceux qui peuvent apporter une bride de réponse.

    En vous souhaitant une agréable après midi.

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour Heuvanek,

    J'utilise énormément la méthode Worksheets.Find. Mais je me fais souvent gronder car certains considèrent qu'on peut éviter de l'utiliser.
    Quoi qu'il en soit, je n'ai jamais rencontré ton problème.
    Une chose est sure : il n'y a pas d'aléatoire. Les cas de tests sont différents !

    En revanche, la méthode Range.Select est, quant à elle, toujours évitable !
    Je te propose que tu nous envoies ton code afin que l'on puisse l'analyser.
    Je pense que ton problème vient de là, comme l'indique l'erreur.

    Cordialement,
    Kimy

  3. #3
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut Autres options
    Bonjour,
    Pour ma part, j'associe le .find à un Range et non pas à un Select, petit exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim MaRech as Range
     
    Set MaRech = worksheets("Feuil1").Range("A1:NZ1").find(dtmMaDate)
    'MaRech est donc la Range qui contient la date cherchée, tu peux donc récupérer l'adresse, la colonne, la ligne, la sélectionner, ...
    Sinon,
    Si toutes les dates de l'année sont en ligne, et considérant le 01/01/2015 en B1
    Ta cellule est donc sur la ligne 1 dans la colonne = [la date cherchée]-[01/01/2015]+2 '+2 pour compenser l'écart de date et la colonne A qui ne contient pas de date
    En code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(1).Cells(1, (dtmmadate - Worksheets(1).Cells(1, 2).Value) + 2).Select
    (J'espère que j'ai pas fait de faute dans le code car écrit à la volée)

    Bon amusement

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    Tu peux peut-etre trouver l'origine du probleme avec le code qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub terst()
    If IsNull(Worksheets("Feuil1").Range("A1:NZ1").NumberFormat) Then
     MsgBox "La propriete NumberFormat n'est pas uniforme.", , "Probleme potentiel"
    End If
    For Each c In Worksheets("Feuil1").Range("A1:NZ1")
     If Trim(c.Value) <> "" Then
      If TypeName(c.Value) <> "Date" Then
        MsgBox c.Value & " n'est pas une date.", , c.Address
        Exit For
      End If
     End If
    Next
    End Sub

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Par défaut
    Bonjour messieurs,

    Pour tout vous dire, le problème ne s'est pas réglé, mais étant donné que ce qui m’intéressait, c'était le numéro de colonne de cette date j'ai finalement crée une variable (ça suit un peu le conseil de FvanderMeulen et de Kimy_Ire finalement):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lngColonneJour = Worksheets("Feuil1").Range("A1:NZ1").find(dtmMaDate).Row
    Du coup là plus de bug...

    Alors qu'avant j'utilisais donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    worksheets("Feuil1").Range("A1:NZ1").find(dtmMaDate).select
    lngColonneJour = ActiveCell.Row
    (vrai que j'aurais pu voir l'inutilité d'avoir deux lignes, mais parfois quand on voit trop de code on réfléchit plus assez)

    Le problème semble donc venir, comme le message l'indiquait, de la méthode Select qui doit plus ou moins mal s'entendre avec Range.
    Je me souviendrais donc d'éviter celle ci à l'avenir

    J'ai bien lu ton code Docmarti, je le testerais peut-être lundi, histoire de quand même avoir des réponses.

    Sinon du coup, quoi pour remplacer Find si c'est une méthode plutôt bancale ?

    Merci de votre aide, je ne sais pas si je mets le sujet en résolu, peut-être puis-je vous envoyer mon code complet pour que vous me donniez de conseil de codeurs de base, pour ma part je suis auto-didact en VBA donc forcement j'ai pas tout les bons réflexes.

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour, bonjour !

    La méthode Find est efficace avec des données cohérentes (format entre autres, la recherche s'effectuant sur l'affichage).
    Ce qui est bancale, c'est ton code en cas de non correspondance : juste consulter l'exemple de l'aide VBA de cette méthode !
    S'il s'agit de la feuille active, Select n'est pas en cause (mais à éviter pour raison d'efficacité).

    Une autre voie est d'utiliser les fonctions de feuille de calculs, faut-il là encore bien les coder …

    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    je suis assez étonné que l'on ne te l'ai pas encrore dit!!!

    c'est un problème connu que find déraille un peu avec les dates tout du moins non il ne déraille pas c'est plutôt l'utilisateur qui oublie un paramètre important

    en effet quand tu a une cellule avec "26/06/2015" c'est pas forcement ce qui a été tapé ou injecté

    exemple si tu tape dans une cellule "26-06-2015" et que dans le menu format tu applique le format date classique tu obtiens "26/06/2015" ca!!! c'est ce que tu vois pas ce qui y est

    je te suggère donc de faire une recherche sur les expressions "date serial" et format(unedate,"dd/mm/yyyy")

    je pencherais plutôt pour date serial et la j'ai tout dis
    A bon entendeur
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. problème avec la méthode find et find next
    Par Sylvie66 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2015, 17h33
  2. Problème avec ma méthode Find
    Par cdurep dans le forum Excel
    Réponses: 2
    Dernier message: 04/03/2014, 10h30
  3. [XL-2010] Problème avec la méthode find d'un objet Range dans une zone filtrée
    Par stargates01 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/02/2014, 23h27
  4. problème avec la méthode getElementById() dans Firefox
    Par matrouba dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/12/2005, 08h55
  5. Problème avec la méthode pack()
    Par tomca dans le forum Langage
    Réponses: 5
    Dernier message: 15/09/2005, 10h58

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