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 :

Utilisation de find dans une "function"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut Utilisation de find dans une "function"
    Bonjour,

    Actuellement je travaille pour un client qui utilise encore Excel 2000
    J'ai un classeur excel qui fonctionne très bien sur 2003 et supérieur, mais sur 2000 certaines macros ne fonctionnent pas.

    Après plusieurs tests , j'ai trouvé l'origine des erreurs :
    - Dans un "Sub" , la fonction find retourne bien la cellule que j'attends
    - la même recherche find dans un "function" me retourne systématiquement Nothing

    Apparemment ce problème n'apparaît que sur 2000 , puisque le même fichier mais ouvert avec 2003 répond correctement

    Est-ce qu'il y a une astuce, qui m'aurait échappé, pour utiliser la fonction find dans un "function" d'Excel 2000

    Merci d'avance à celui qui pourra stopper mon arrachage de cheveux

    PS : Je sais que la version Office2000 commence à dater, mais le client est très attaché à son Office 2000 , et le client est roi

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Est-ce que tu peux publier le code de la fonction ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut
    Bonjour Daniel et merci de ton intervention,

    J'ai un fichier très simple, je l'ai attaché à la discussion, qui contient deux fois la même recherche une fois sous forme de Sub et une autre sous forme de Function

    Dans Excel 2003 ma cellule A1 contient "3" ( valeur que j'attends effectivement puisque la chaine est contenu dans "C3") alors que sous Excel 2000 elle contient "0".
    Dans les deux versions, le "bouton 1" me retourne "3"


    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
     
       Sub test()
     
       Dim Cellule As Range
     
       With Range("C:C")
          Set Cellule = .Find(What:="test", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
       End With
     
       If Cellule Is Nothing Then
         MsgBox "Not found"
       Else
         MsgBox Cellule.Row
       End If
     
    End Sub
    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
     
    Function testf()
     
       Dim Cellule As Range
     
       With Range("C:C")
          Set Cellule = .Find(What:="test", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
       End With
     
       testf = 0
     
       If Cellule Is Nothing Then
        MsgBox "Not found"
       Else
           testf = Cellule.Row
       End If
     
    End Function
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je n'ai pas Xl2000, dur dur d'être sûr d'une solution

    as-tu testé en utilisant un argument dans ta fonction ?

    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
    Function testf(NbCol As Long)
     
       Dim Cellule As Range
     
       With Columns(NbCol)
          Set Cellule = .Find(What:="test", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
       End With
     
       testf = 0
     
       If Cellule Is Nothing Then
        MsgBox "Not found"
       Else
           testf = Cellule.Row
       End If
     
    End Function
    avec en A1 : =testf(3)

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Le type retourné par la fonction testf n'est pas spécifié ..... je ne sais pas si c'est gênant sur les versions précédentes mais je le forcerai ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function testf() As Integer
    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
    With Columns(NbCol)
          Set Cellule = .Find(What:="test", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
       End With
     
       testf = 0
     
       If Cellule Is Nothing Then
    ' Peut-être rajouter celà
        Set Cellule = .Find(What:="test", LookIn:=xlFormula, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
       End If
     
    If Cellule Is Nothing Then
       MsgBox "Not found"
       Else
           testf = Cellule.Row
    End If

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    J'ai trouvé un cas analogue sur internet (avec les mêmes colonnes ?). Le contournement est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim Plage As Range
        Set Plage = Range("C:C")
        Set Cellule = Plage.Find(What:="test", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
    Ca ne coûte rien d'essayer.

Discussions similaires

  1. [XL-2010] utilisation de Find dans une fonction perso
    Par luca.donati dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/11/2012, 14h13
  2. bug avec Find dans une function
    Par paiva44 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/01/2010, 18h04
  3. Réponses: 5
    Dernier message: 15/04/2005, 14h22

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