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 :

Optimisation d'un programme de recherche


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Par défaut Optimisation d'un programme de recherche
    Bonjour à tous !

    J'ai créé un code pour pouvoir faire correspondre un onglet d'un de mes fichiers avec un autre. Malheureusement, celui-ci est bien trop lent pour ce que je veux en faire.
    Quelqu'un saurait-il l'optimiser ?

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub recherche_correspondance()
    'récupération du nombre de lignes ce jour-là
    Worksheets("Feuil1").Activate
    nbligne = Range(Cells(1, 2), Cells(1, 2).End(xlDown)).Rows.Count
     
     
    'POur chacune de ces lignes, recherche de correspondance
    For i = 1 To nbligne
    With Sheets("Feuil1").Range("B1").Value = WorksheetFunction.VLookup(.Range("A1").Value, Sheets("Feuil2").Range("A1:B100"), 2, False)
    End With
    Next i
     
    End Sub
    Merci d'avance

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Ta boucle n'influe en rien dans ton code alors autant ne pas la faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub toto()
    Sheets("Feuil1").Range("B1").Value = WorksheetFunction.VLookup(.Range("A1").Value, Sheets("Feuil2").Range("A1:B100"), 2, False)
    end sub

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Et si tu mettais un classeur exemple avec qcq lignes de données et les explications de ce que tu veux ?
    Ca sera plus simple que d'essayer de deviner, sans doute mal...
    Combien de lignes en réalité ? Le choix de la méthode en dépend.

    eric

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Par défaut
    J'ai peut-être trop simplifié.

    Je voudrais reproduire cette formule excel, mais en automatique sur toutes les lignes de ma feuille "BNP" (les lignes étant variables, je les calcule au préalable et nomme leur nombre ligneBNP... elles ne sont pas supérieurs à une centaine environ) :

    =+SI(ESTNA(RECHERCHEV([@[REF LETTRAGE]];'Requete 472300'!$C:$C;1;FAUX));"soldé";"à imputer")

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    C'est cool

    Moi j'aimerais une Ferrari mais pour que tu puisses m'aider à l'avoir je ne vais pas te donner le modèle ni le prix ni la motorisation, tu me diras comment tu t'en sors!

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Comme tu connais le début et la fin de ta plage, tu peux y inscrire directement ta formule.
    Si tu ne veux pas conserver cette formule pour raison de performance, copie/colle-la en valeur par la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range("B1:B" & nbLigne).Formula = "=La Formule comme écrite en B1"
    Il te faut juste traduire cette formule en anglais en utilisant la virgule plutôt que le point-virgule. Si tu ne sais pas comment traduire ta formule, place-toi sur la cellule qui contient la formule en français et crée une petite macro avec ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Activecell.Formula

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Ou si tu veux ta boucle avec le résultat, comme suggéré par EnguEngue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub recherche_correspondance()
    Dim nbligne As Long, i As Long
     
    With Sheets("Feuil1")
      nbligne = .Range("B" & .Rows.Count).End(xlDown).Rows
      For i = 1 To nbligne
        .Range("B" & i) = WorksheetFunction.VLookup(.Range("A" & i), Sheets("Feuil2").Range("A1:B100"), 2, False)
      Next i
    End With
     
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Re,

    parmi:
    Comme tu connais le début et la fin de ta plage, tu peux y inscrire directement ta formule.
    Si tu ne veux pas conserver cette formule pour raison de performance, copie/colle-la en valeur par la suite.

    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    Sheets("Feuil1").Range("B1:B" & nbLigne).Formula = "=La Formule comme écrite en B1"

    Il te faut juste traduire cette formule en anglais
    En utilisant .FormulaLocal la formule peut être copiée-collée directement dans le code.

    eric

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Citation Envoyé par eriiic Voir le message
    Re,


    En utilisant .FormulaLocal la formule peut être copiée-collée directement dans le code.

    eric
    Ça cause un problème de portabilité dans des systèmes anglais, par contre... Et c'est souvent mon cas. C'est pourquoi je préfère y aller toujours en anglais.

    Mais tu as tout à fait raison

Discussions similaires

  1. Programme effectuant recherches par URL ??
    Par pouic06 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 12/04/2006, 13h51
  2. Programme de recherche des fichiers
    Par lion13 dans le forum Linux
    Réponses: 2
    Dernier message: 05/03/2006, 22h28
  3. Optimisation d'un programme d'échecs
    Par Erickann dans le forum x86 32-bits / 64-bits
    Réponses: 8
    Dernier message: 23/11/2005, 20h23
  4. optimisation d'une requete de recherche
    Par moog dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 06/04/2005, 16h58
  5. Préfixes segments programmes (PSP) : recherche de doc
    Par pucenet dans le forum Assembleur
    Réponses: 21
    Dernier message: 30/03/2005, 23h05

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