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 Find lors d'une éxécution automatique


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Problème avec Find lors d'une éxécution automatique
    Bonjour ,

    J'ai un problème avec Find, qui marche lorsque j'appelle la fonction en debug, mais pas en calcul automatique.

    1/ Je déroule la fonction Test dans l'éditeur VBA, la fonction Test2 fonctionne correctement, la date passée en argument est trouvée

    2/ Dans une cellule de ma 5ième feuille, je mets =Test2(B3;"Date2010"). La date contenue dans B3 n'est pas trouvée, bien que sa valeur soit bien présente dans la plage "Date2010"

    Si quelqu'un avait une piste ...

    Merci !!!

    PS: je viens de rajouter un fichier de test

    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
     
    Sub Test()
       Dim i As Double
       i = Test2(ThisWorkbook.Sheets(5).Range("B3"), "Date2010")
    End Sub
     
    Function Test2(dateDebut As Date, sPlageDate As String) As Double
       Application.Volatile
     
       Test2 = 14
       Dim rCellTest As Range
       For Each rCellTest In Range(sPlageDate)
          ' pour vérification de la plage
          Debug.Print "Date " & rCellTest
       Next rCellTest
     
       Dim rCellDebut As Range
       Set rCellDebut = Range(sPlageDate).Find(What:=dateDebut, lookat:=xlWhole)
     
       If (rCellDebut Is Nothing) Then
          Debug.Print "Date non trouvée dans la plage " & sPlageDate & " Debut : " _
                      & dateDebut
          Exit Function
       End If
     
       Test2 = 15
     
    End Function
    Fichiers attachés Fichiers attachés

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Réponse trouvée sur un autre forum, en précisant le format ça marche même en volatile.

    Mmouaih ...

    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
    Option Explicit
    Sub Test()
      Dim i As Double
      i = Test2(ThisWorkbook.Sheets(1).Range("D2"), Range("Date2010"))
    End Sub
     
    Function Test2(dateStart As Date, rRangeDate As Range) As Double
      Application.Volatile
     
      Test2 = 14
      Dim rCellTest As Range
      For Each rCellTest In rRangeDate
        ' to check the range content
        Debug.Print "Date " & rCellTest
      Next rCellTest
     
      Dim rCellStart As Range
      Set rCellStart = rRangeDate.Find(What:=Format(dateStart, rRangeDate.Cells(1).NumberFormat), _
                                              lookat:=xlWhole, LookIn:=xlValues)
     
      If (rCellStart Is Nothing) Then
        Debug.Print "Date not found in range date : " _
                    & dateStart
        Exit Function
      Else
        Debug.Print "Date found " & rCellStart
      End If
     
      Test2 = 15
     
    End Function

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Je confirme
    Salut gentyjp;

    Je confirme, j'ai le même problème que toi.
    Je remarque qu'en exécutant le code pas à pas que la méthode find retrouve la valeur recherché.
    Mais en exécutant le programme normalement, la méthode find plante.

    Je vais suivre les réponses et chercher de mon côté.
    Tu me tiens en corant de ton côté.

    ++

    LabChNe

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Range.Find entre deux classeurs
    J'essaye de chercher une valeur dans un autre classeur, récupérer une donnée e t revenir sur le premier classeur.

    Avec une synthaxe abituelle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Workbooks("classeur2").Activate
    Worksheets("Feuil1").Activate
    With Range("B:B")
    Set c=.Find(ValeurRecherché, LookIn:=xlValues)
    '....
    En exécutant le programme pas à pas, la éthode Find trouve la valeur recherché sans problème.
    Maintenant, en appelant le programme par bouton la méthode Find plante.
    J'ai même essayé de changer et de mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c=Workbooks("classeur2").Sheets(1).Range("B1:B900").Find(ValeurRecherché, LookIn:=xlValues)
    Ca ne marche pas, j'ai intégré les données du deuxième classeur dans le premier et puis là ca marche.

    Je ne sais pas si quelqu'un a une explication, qu'est ce qui fait que la méthode find entre deux classeurs retourne une valeur Nothing.

    Merci, +++

    LabChNe

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Ceci fonctionne
    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 test()
    Dim Sh As Worksheet, Cel As Range, ValRech As String
     
    Set Sh = Workbooks("Source.xls").Sheets(1)
    ValRech = "toto"
     
    Set Cel = Sh.Columns("A").Find(ValRech)
    If Not Cel Is Nothing Then
        MsgBox "La valeur recherchée a été trouvée dans la cellule " & Cel.Address(0, 0)
    Else
        MsgBox "La valeur recherchée n'a pas été trouvée"
    End If
     
    End Sub

Discussions similaires

  1. [Batch] Problème avec caractère ! lors d'une lecture de fichier pour extraction
    Par damsmut dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 20/11/2012, 16h21
  2. Réponses: 4
    Dernier message: 19/07/2009, 13h51
  3. Problème avec py2exe lors d'une migration 2.4 -> 2.6
    Par peterphonic dans le forum Py2exe
    Réponses: 1
    Dernier message: 28/01/2009, 15h38
  4. Problèmes avec un TWebBrowser dans une DLL
    Par bellamyjc dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/01/2005, 22h35
  5. Problème avec un LIKE dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2004, 14h38

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