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 :

Référence relative à des cellules et performances


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 123
    Points
    123
    Par défaut Référence relative à des cellules et performances
    Bonjour,

    Je dois faire qqch d'assez simple : dans une colonne de ma Sheet1, je dois insérer des formules vLookup avec un code VBA. Ces formules vLookup font référence à une plage de la Sheet2 (ses 4 premières colonnes, A à D).

    J'ai deux façons de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlBook.Sheets("Sheet1").Range("P2:P10000").FormulaR1C1 = "=VLOOKUP(RC[-3],Sheet2!C[-15]:C[-12],3)"
    Ici on retrouve les colonnes de Sheet2 relativement à là ou on met la formule de sheet1 (c'est dans la colonne P, donc les colonnes A à D vont de -15 à -12). Ca marche, mais avec beaucoup de lignes ça devient long à executer.

    Méthode 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlBook.Sheets("Sheet1").Range("P2:P10000").FormulaR1C1 = "=VLOOKUP(RC[-3],Sheet2!A:D,3)"
    Ici A à D est codé en dur. Ca va beaucoup plus vite, mais quand j'ouvre ma feuille ensuite je vois "#NAME?" dans les cellules. Pourtant la formule est juste, et si je clique dans la barre de formule et que j'appuie sur entrée la bonne valeur apparait.


    Est il possible :
    - de faire tourner la méthode 1 plus vite ?
    - de débuguer la méthode 2 ?

    Merci pour vos idées

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Après la seconde méthode, as-tu essayé de mettre
    ou l'une des différentes méthodes proposées dans l'aide à "Calculate".
    Une autre méthode consiste à écrire ta formule une fois et à la recopier sur la plage de cellule voulue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xlBook.Sheets("Sheet1").Range("P2").FormulaR1C1 = _
    "=VLOOKUP(RC[-3],Sheet2!C[-15]:C[-12],3)"
    xlBook.Sheets("Sheet1").Range("P2").Copy _
    destination:=xlBook.Sheets("Sheet1").Range("P3:P10000")
    Tu testes et tu prends la meilleure.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 58
    Points
    58
    Par défaut
    Le fait de faire une fois le calcul et de le recopier sur la plage voulue est pour moi le plus rapide, en effet c'est ce que j'ai fait sur mon projet et mes quelques 450000 cellules sont des produits par des nombres tous différents choisis en fonction d'autres paramètres. et l'ensemble se fait en environ 1 min 40 avec une petite userform et progressBar.

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 123
    Points
    123
    Par défaut
    Merci pour les idées.

    J'ai essayé en faisant un copy paste en VBA, c'est tout aussi long qu'en écrivant directement la formule dans la plage. Bizarre, en le faisant manuellement c'est plus rapide.

    Sinon Application.Calculate ne marche pas dans ce cas, ni des méthodes assimilées comme CalculateFull.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Tententai et le forum
    Méthode 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlBook.Sheets("Sheet1").Range("P2:P10000").FormulaR1C1 = "=VLOOKUP(RC[-3],Sheet2!A:D,3)"
    Ici A à D est codé en dur. Ca va beaucoup plus vite, mais quand j'ouvre ma feuille ensuite je vois "#NAME?" dans les cellules. Pourtant la formule est juste, et si je clique dans la barre de formule et que j'appuie sur entrée la bonne valeur apparait.

    Est il possible :
    - de débuguer la méthode 2 ?
    Impossible d'après tes dires, , mais essaies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlBook.Sheets("Sheet1").Range("P2:P10000").FormulaR1C1 = "=VLOOKUP(RC[-3],C1:C4,3)"
    A+

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Utilises-tu Application.Updating = False en début de procédure ? (que tu replaces à True à la fin)
    Jète un oeil à ce topic et à celui-ci, ce n'est pas le même sujet mais si tu pouvais y trouver des idées neuves
    A+

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 123
    Points
    123
    Par défaut
    Hello,

    Avec C1:C4 ça marche oui, mais même problème de performances qu'avec C[-15]:C[-12]

    Je vais me pencher sur les autres topics cités par ouskel'n'or voir si j'y trouve pas des idées

Discussions similaires

  1. [XL-2003] Liste des cellules qui font référence à une cellule donnée
    Par CUCARACHA dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/02/2010, 16h29
  2. Réponses: 2
    Dernier message: 18/12/2008, 12h00
  3. Performances relatives des moyens de synchronisation
    Par ram-0000 dans le forum Windows
    Réponses: 6
    Dernier message: 20/03/2008, 19h05
  4. référence relative à une cellule saisie
    Par Peanut dans le forum Excel
    Réponses: 14
    Dernier message: 13/07/2007, 15h15
  5. LISTBOX rowsource : référence à des cellules fusionées
    Par alexxx69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/10/2005, 15h42

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