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 :

[VBA-E] [optimisation] formule etendu


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 82
    Par défaut [VBA-E] [optimisation] formule etendu
    je realise le code suivant sur plus de 65000 lignes
    c tres tres long !
    quelau'un aurait une idee ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      For Each MaCellule In ActiveSheet.Range(LoginCol & ":" & LoginCol)
            If IsEmpty(MaCellule) Then
                Exit For
            Else
                Cells(i, FNameColWin).FormulaLocal = "=VLOOKUP(" & LoginCol & i & ",Win!B:B,2,FALSE)"
                Cells(i, LNameColWin).FormulaLocal = "=VLOOKUP(" & LoginCol & i & ",Win!C:C,3,FALSE)"
                Cells(i, FNameColUnix).FormulaLocal = "=VLOOKUP(" & LoginCol & i & ",Win!B:B,2,FALSE)"
                Cells(i, LNameColUnix).FormulaLocal = "=VLOOKUP(" & LoginCol & i & ",Win!C:C,3,FALSE)"
            End If
        i = i + 1
     
        Next MaCellule
    merci

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    "toto:toto" exprime peut-être le range "toto" tout court ?

    Et l'affichage n'est pas inhibé pendant ces opérations pour gagner du temps ?

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 82
    Par défaut
    je suis pas sur dqvoir compris mqis j'ai envie de te rpeondre "mais la formule change en fonction du i"

    je pense que je n'ai pas compris l'inibition n'ont plus !
    mais je vais te repondre
    "quand je lance la macro le process prend 100% du CPU dc effectivement l'affichage est alteree"

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    tu n'as vraiment pas compris ?
    alors lis-toi :
    ActiveSheet.Range(LoginCol & ":" & LoginCol)
    pour le reste (inhibition de l'affichage pendant le déroulement des opérations puis restitution de l'affichage in fine, regarde dans l'aide en ligne :

    Application.ScreenUpdating = False
    Application.ScreenUpdating = True

    Ce genre de sujet est récurrent (c'est le énième sur ce forum... au point que même moi, qui ne possède pas VBA, commence à le connaître par coeur )

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 82
    Par défaut
    ok pour l'affichage!

    pour le premier point je parcours effectivement toutes les cellules de la colonne juqu'a arriver a une cellule vide

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Remplacer l'indexation avec i par un offset sur MaCellule.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Citation Envoyé par trach.sam
    pour le premier point je parcours effectivement toutes les cellules de la colonne juqu'a arriver a une cellule vide
    Dans ce cas, ça sera plus rapide de sélectionner la plage de cellules remplies. Comme ça tu vires le test (et l'incrémentation du compteur, qui en plus est déjà devenue intuile avec la remarque d'AlainTech), tu gagnes du temps.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  8. #8
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Salut,

    Citation Envoyé par jmfmarques
    "toto:toto" exprime peut-être le range "toto" tout court ?
    Dans son cas, d'après ce que je comprends, LoginCol serait plutôt un indice de colonne (enfin, la lettre qui correspond). Donc le Range(toto & ":" & toto) sert à sélectionner la colonne complète. Perso, l'instruction Columns est plus explicite, mais bon...

    Je ne pige pas trop ce que fait le compteur en i dans la boucle, c'est lourd comme technique, il doit y avoir plus finot...

    Sinon, pour accélérer, en plus de la technique du screenupdating donné par jmfmarques, essaye de voir en désactivant le recalcul de la page pendant la mise à jour des formules (parce que là, il doit remettre à jour à chaque fois que tu colles une formule... donc ça prend du temps...).
    Pour cela, utilise quelque chose suivant cette trame:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    flag=application.calculation   'pour mémoriser l'état du mode de calcul
    application.calculation=xlCalculationManual
     
    .... ton code qui prend du temps ici ...
     
    application.calculation=flag
    Comme ça, la mise à jour des calcul se fera à la fin, une fois que toutes les formules seront en place.

    Bon, c'est de tête, alors tu corriges les erreurs si il y en a...

    Et pour améliorer encore plus la vitesse si besoin est, tout plein d'astuces sur cette page: http://www.ozgrid.com/VBA/SpeedingUpVBACode.htm

    On a déjà donné les deux premières!
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

Discussions similaires

  1. [VBA-E] Problème formule
    Par nattyman dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/08/2006, 10h55
  2. [VBA/SQL] optimisation avec un recordset?
    Par herendel dans le forum Access
    Réponses: 1
    Dernier message: 28/04/2006, 19h20
  3. [EXCEL][VBA] Utilisation des formules Excel en VBA
    Par Amanck dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2005, 15h08
  4. [VBA]écrire des formules en Access comme en Excel ?
    Par beegees dans le forum Access
    Réponses: 2
    Dernier message: 14/12/2005, 01h23
  5. concaténation en vba dans une formule de cellule Excel
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/12/2005, 22h58

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