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 :

FIND sur DATE incompréhensible.


Sujet :

Macros et VBA Excel

  1. #21
    Membre éprouvé Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 327
    Par défaut
    Rien à faire, j'ai toujours l'erreur 13 dans ce cas.
    Donc, lorsque je n'ai QUE des dates dans la colonne 1, ça fonctionne nickel.

    Mais dans le dernier cas, la feuille ressemble à ça :

    Janvier 2011 ...
    DATE ARR DEP Total
    01/01/2011 533 555 1088
    02/01/2011 691 704 1395
    03/01/2011 697 656 1353
    04/01/2011 674 676 1350
    05/01/2011 670 667 1337
    06/01/2011 669 675 1344
    07/01/2011 667 693 1360
    08/01/2011 580 580 1160
    09/01/2011 641 652 1293
    10/01/2011 697 657 1354
    11/01/2011 658 659 1317
    12/01/2011 669 667 1336
    13/01/2011 678 687 1365
    14/01/2011 677 700 1377
    15/01/2011 578 585 1163
    16/01/2011 631 640 1271
    17/01/2011 644 606 1250
    18/01/2011 629 615 1244
    19/01/2011 660 671 1331
    20/01/2011 678 675 1353
    21/01/2011 681 706 1387
    22/01/2011 560 573 1133
    23/01/2011 625 638 1263
    24/01/2011 686 643 1329
    25/01/2011 646 640 1286
    26/01/2011 660 665 1325
    27/01/2011 663 658 1321
    28/01/2011 672 700 1372
    29/01/2011 566 576 1142
    30/01/2011 626 642 1268
    31/01/2011 703 654 1357
    TOTAL 20109 20115 40224
    Moyenne 1297,55
    Moyenne Weekend 1217,60
    Moyenne Semaine 1335,62
    Evolution M-1

    et dans ce cas, je tombe sur une erreur 13 : Incompatibilité de type sur l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set OBJ_TRAFIC = Columns(2).Find(What:=WMemo_Date, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=True)
    Ca me tape sur le systèmeuh...

  2. #22
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    il faut éviter d'utiliser Select ... les ActiveCell , les objets Range , columns seul (sans préciser classeur /Feuille) ...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With ThisWorkbook.Sheets(P_FeuilleTraficAnnuel)
    Set OBJ_TRAFIC = .Columns(2).Find(What:=WMemo_Date, After:=.Range("B1"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=True)
     
    End With
    attention au points (.) devant Columns et Range. .

  3. #23
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Pour info et vu la complexité du sujet ainsi que se récurrence, je met le lien vers un cas semblable de ce jour, avec une solution qui est celle que je privilégie quand on peut y souscrire.

    http://www.developpez.net/forums/d11...e/#post6335106

    PS : Le fichier en question faisant plus de 177 000 lignes, il démontre bien qu'il faut se pencher sur la résolution des problèmes avec Find plutôt que de tenter un For each... le verdict du chrono serait sans appel.

    cordialement,

    Didier

  4. #24
    Membre éprouvé Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 327
    Par défaut
    Bon, c'est en bonne voix, voire mieux
    Tout semble fonctionner à merveille, il faut toutefois que je pousse mes tests pour en être sur.
    Par contre, il a fallut que je supprimer "ThisWorkBook." car en l'utilisant j'avais une erreur "hors limite".
    Est-ce que le code reste quand même sur tel quel ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    With Sheets(P_FeuilleTraficAnnuel)
            Set OBJ_TRAFIC = .Columns(2).Find(What:=WMemo_Date, After:=.Range("B1"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
                SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=True)
    End With
    De plus, j'ai un collègue qui me demande, comment récupérer toutes les occurrences de la valeur cherchée par le FIND et de tester la fin de fichier pour éviter un bouclage ?

  5. #25
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Quand tu as ce genre d'erreur, il vaut toujours mieux chercher à savoir pourquoi, sinon la cause se manifestera - peut-être - à un autre moment. quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(P_FeuilleTraficAnnuel)
    , en fait tu écris de façon implicite ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("xxxx").Sheets(P_FeuilleTraficAnnuel)
    Il est bon donc de savoir à quel classeur tu t'adresses, tu peux avoir le nom en clair ou ActiveWorkbook (par défaut, comme dans ton exemple) ou encore comme précédemment ThisWorkbook qui désigne le classeur qui contient le code actif.

    cordialement,

    Didier

  6. #26
    Membre éprouvé Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 327
    Par défaut
    Super.
    Explication très claire, merci.

    De plus, j'ai un collègue qui me demande, comment récupérer toutes les occurrences de la valeur cherchée par le FIND et de tester la fin de fichier pour éviter un bouclage ?

  7. #27
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    comme indiqué dans les règles, pour une bonne clarté globale, pour un nouveau sujet, il vaut mieux ouvrir une nouvelle discussion en exposant clairement la nouvelle donne

    Ca te permet en plus d'avoir de nouveaux contributeurs qui préfèrent démarrer sur un sujet neuf plutôt que de retracer tout un historique avec dans ce cas des empilements plus ou moins liés.

    cordialement,

    Didier

  8. #28
    Membre éprouvé Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 327
    Par défaut
    re bonjour,

    j'ai encore une incompatibilité de type sur :

    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
     
            WTexteAChercher = "NC"
            WTrouve = False
            WLig_Trouve = 0
            Dim OBJ_NC_1 As Object
            'cherche l'occurence dans la colonne 1
    ''''''''''        Set OBJ_NC_1 = Range(Cells(WPremLigSEM, 13), Cells(WDernLigSEM, 13)).Find(WTexteAChercher, LookIn:=xlValues)
            With Sheets(P_FeuilleTraficAnnuel)
                Set OBJ_NC_1 = .Range(Cells(WPremLigSEM, 13), Cells(WDernLigSEM, 13)).Find(What:=WTexteAChercher, After:=.Range(Cells(WPremLigSEM, 13), Cells(WDernLigSEM, 13)), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
                    SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=True)
            End With
            'Si elle est trouvée, renseigne WLig_Trouve avec le N° de ligne
            'Si elle n'est pas trouvée => insérer une ligne.
            If Not OBJ_NC_1 Is Nothing Then
                WTrouve = True
                WLig_Trouve = OBJ_NC_1.Row
            Else
                WTrouve = False
                WLig_Trouve = 0
            End If
            Set OBJ_NC_1 = Nothing
    et je n'arrive pas à trouver d'où cela peux venir ?

  9. #29
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    A tout les coups la recherche ne se produit pas à l'endroit voulu, souci de cellule active, de désignations de plages etc...

    Cherche de ce côté là....

    cordialement,

    Didier

  10. #30
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pourquoi une plage pour le paramètre After :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    After:=.Range(Cells(WPremLigSEM, 13), Cells(WDernLigSEM, 13))
    Il manque aussi le point (.) devant tes objets Cells ... comme pour les Range, Columns.. si tu ne met pas le point tu ne précise pas la feuille et donc tu agit sur sa feuille active avec tous les risques que cela comporte (quelqu'un peu changer de feuille/classeur durant le déroulement de ta macro..)

    pour after essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    After:=.Cells(WPremLigSEM, 13)
    et n'oublie pas de rajouter le point devant tes autres Cells...

  11. #31
    Membre éprouvé Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 327
    Par défaut
    Dans le "After", ce n'est pas la zone de recherche qu'il faut mettre ?

    Bon, je viens de tester ça :

    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
     
                WTexteAChercher = "NC"
                WTrouve = False
                WLig_Trouve = 0
                Dim OBJ_NC_1 As Object
                'cherche l'occurence dans la colonne 1
    ''''''''''            Set OBJ_NC_1 = Range(Cells(WPremLigMois, 3), Cells(WDernLigMois, 3)).Find(WTexteAChercher, LookIn:=xlValues)
                With Sheets(P_FeuilleTraficAnnuel)
                    Set OBJ_NC_1 = .Range(.Cells(WPremLigMois, 3), .Cells(WDernLigMois, 3)).Find(What:=WTexteAChercher, After:=.Range(.Cells(WPremLigMois, 3)), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
                        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=True)
                End With
                'Si elle est trouvée, renseigne WLig_Trouve avec le N° de ligne
                'Si elle n'est pas trouvée => insérer une ligne.
                If Not OBJ_NC_1 Is Nothing Then
                    WTrouve = True
                    WLig_Trouve = OBJ_NC_1.Row
                Else
                    WTrouve = False
                    WLig_Trouve = 0
                End If
                Set OBJ_NC_1 = Nothing
    et j'obtiens l'erreur "1004 : erreur définie par l'application ou par l'objet".

    C'est fou, je vais jamais m'en sortir de ce truc...

    Ps : pour info, je précise que la ligne 7 du code fonctionne, mais je voulais faire les choses dans les règles.

  12. #32
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Citation Envoyé par Zebulon777
    Dans le "After", ce n'est pas la zone de recherche qu'il faut mettre ?
    Un peu d'effort = moins d'efforts perdus, lire l'aide VBA = un peu d’effort....

    After Facultatif Variante Cellule après laquelle vous souhaitez commencer la recherche. Cela correspond à la position de la cellule active lorsqu'une recherche est effectuée à partir de l'interface utilisateur. Notez que l'argument Après doit correspondre à une seule cellule de la plage. Rappelez-vous que la recherche commence après cette cellule ; la cellule spécifiée n'est pas recherchée jusqu'à ce que la méthode revienne à cette cellule. Si vous ne spécifiez pas cet argument, la recherche commence après la cellule située dans le coin supérieur gauche de la plage.
    cordialement,

    Didier

  13. #33
    Membre éprouvé Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 327
    Par défaut
    Voui, voui, j'avais vu après avoir poster mon message...LOL

    Bon en tout cas, merci à tous pour votre aide.

    Tous les derniers tests sont concluant.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2010] Méthode Find sur des dates
    Par silver64 dans le forum Excel
    Réponses: 3
    Dernier message: 16/03/2012, 20h36
  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. [Debutant(e)]operation sur dates
    Par sUrTr dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/10/2004, 15h58
  4. Resutlat de calcul sur date formaté
    Par neness dans le forum SQL
    Réponses: 6
    Dernier message: 16/06/2004, 15h34
  5. Calcul sur date
    Par Thomad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/09/2003, 08h55

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