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 :

Probleme avec Fonction equiv()


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Par défaut Probleme avec Fonction equiv()
    Bonjour à tous

    Dans une macro j'essaye de voir si une valeur se trouve dans une colonne

    J'utilise cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EQUIVAL = Application.WorksheetFunction.Match(Num_CF, Selection.range("V:V"), 1)
    Mon but est de faire cette verification le plus rapidement possible

    Une boucle fait l'affaire mais n'est pas optimale en Temps surtout lorsque l'on doit faire cette verif + de 200 fois sur une feuille de 7000 ligne!!!


    Ma ligne ne beugue pas mais ne trouve pas la valeur alors que parfois c'est le cas . Est ce un pb de format ?

    Merci de vos reponses

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    chez moi ça marche comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub test()
    Num_CF = 2
    equival = Application.WorksheetFunction.Match(Num_CF, Range("V:V"), 1)
    MsgBox equival
    End Sub
    voici ce que dit l'aide, je me suis contenté d'enlever le selection qui m'avais l'air de trop
    Citation Envoyé par la touche F1
    Si vous utilisez une fonction de feuille de calcul qui requiert une référence de plage comme argument, vous devez indiquer un objet Range. Par exemple, vous pouvez utiliser la fonction de feuille de calcul Match pour rechercher une plage de cellules. Dans une cellule de feuille de calcul, vous devez taper une formule telle que =MATCH(9,A1:A10,0). En revanche, dans une procédure Visual Basic, vous spécifiez un objet Range pour obtenir le même résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub FindFirst() 
    myVar = Application.WorksheetFunction _ .Match(9, Worksheets(1).Range("A1:A10"), 0)
     MsgBox myVar
    End Sub
    mais j'ai pas vraiment fait le lien; et surement pas dans les même conditions que toi. tas plus qu'a tester

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Par défaut
    Je n'ai toujours pas résolu mon pb

    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
    For COMPTEUR = 2 To lastline("A")
     
    Num_CF = Workbooks(GaG_FIC).Sheets(1).Cells(COMPTEUR, 14).Value
     
    Windows(CIB_FIC).Activate
     
    n = Application.WorksheetFunction.Match(Num_CF, Range("V:V"), 0)
     
                             If n <> 0 Then
     
                                  i = COMPTEUR
                                  Rows(i & ":" & i).Select 'pour debuguade
                                  TRANSFERT i, GaG_FIC, CIB_FIC
     
                             Else
                             End If
                    Next

    D'ou peut venir le beug ? du format des valeurs?

    D'un select qui manque?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    peux pas te dire. déja chez moi là ça ça passe pas

  5. #5
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour à tous

    Une question idiote en passant

    Sais tu quel classeur est actif au moment de ce traitement
    Parceque tu ne precise pas dans ton Range("V:V") sur quel classeur tu fais ta recherche

    Si c'est bon, fais un point d'arret et verifie tes valeurs en passant le pointeur de la souris sur les variables

    Bonne soirée

    ps: Lastline("A"), comme son nom et sa forme l'indique, doi etre une fonction perso qui renvoie le dernier numero de ligne de la colonne entre "" soit A.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 243
    Par défaut
    Salut à tous

    En effet wilfried t'a vu juste. Pour que ça marche un temps soit peu faut au moins lui déclarer où on veut faire notre rechreche.

    Revoilà mes nouvelles lignes:
    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
     
    For COMPTEUR = 2 To lastline("A")
     
    Num_CF = Workbooks(GaG_FIC).Sheets(1).Cells(COMPTEUR, 14).Value
     
    a.Activate
    'On Error Resume Next
    n = a.Range("V:V").Find(Num_CF)
     
                             If n = 0 Then
     
                                  i = COMPTEUR
                                  Rows(i & ":" & i).Select 'pour debuguade
                                  TRANSFERT i, GaG_FIC, CIB_FIC
     
                             Else
                             End If
     
                    n = 0
                    Next
    Pour l'instant ça marche, mais je doute de son efficacité dans le cas où les formats entre les deux classeurs ne sont pas les mêmes.

Discussions similaires

  1. [Mail] probleme avec fonction mail() !!!
    Par H-bil dans le forum Langage
    Réponses: 6
    Dernier message: 19/06/2006, 23h45
  2. C++ - Probleme avec fonction virtuelle
    Par vdumont dans le forum C++
    Réponses: 1
    Dernier message: 20/03/2006, 20h49
  3. probleme avec fonctions
    Par Burinho dans le forum C
    Réponses: 8
    Dernier message: 29/12/2005, 21h28
  4. Réponses: 17
    Dernier message: 24/03/2005, 12h24
  5. [langage] problème avec fonction read
    Par domidum54 dans le forum Langage
    Réponses: 2
    Dernier message: 30/03/2004, 20h42

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