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 :

Attendre fin des calculs pour poursuivre la macro [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Attendre fin des calculs pour poursuivre la macro
    Hello hello !

    D'abord merci à tous ceux qui animent le forum et qui alimentent cours et questions sur VBA & excel

    Je rencontre un petit souci, je dispose d'un fichier avec de nombreuses lignes (>20000), dans ma macro je déploie une formule Excel que j'ai obtenue avec l'enregistreur de macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("Détails").Range("S15").FormulaR1C1 = _
    		"=IF(COUNTIF(Infos!R15C[-16]:R" & indiceLignesOnglet1 & "C[-16],LEFT(RC[-18],7)&""*"")=0,""X"","""")"
    	Sheets("Détails").Range("S15").AutoFill Destination:=Range("S15:S"& indiceLignesDetails), Type:=xlFillDefault
    Puis je ne souhaite pas garder ces formules, en effet ça ralenti considérablement mon pc quand je fais des filtres (normal), du coup un peu plus loin dans mon code je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Détails").Range("S15:S" & indiceLignesOnglet1) = Sheets("Détails").Range("S15:S" & indiceLignesOnglet1).value
    Seulement voila les calculs ne sont pas encore terminés et du coup les valeurs sont erronées...

    J'ai pensé au wait mais je trouve ça pas top, sachant que je ne sais pas à l'avance combien de temps va durer le calcul.

    Voila, je ne sais pas si vous avez saisi mon problème, si vous avez besoin de plus de détails, dites moi! Merci d'avance pour votre aide précieuse

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Essayes d'utiliser l'instruction DoEvents entre les 2 parties de codes.

    Philippe

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Ok, merci Philippe pour ta réponse, je vais tester ça et je te confirme si ça fonctionne.

    Sinon petite aparté, (j'ai vu que tu étais dev VBA, donc j'en profite pour te demander des conseils ), lorsque l'on a des gros fichiers Excel avec de nombreuses lignes, n'est il pas plus rapide de passer nos fichiers Excel dans Access afin de les recoupé et de recuperer les infos dont on a besoin plutot que de recuperer les fichiers dans Excel et de faire des macro pour les traiter ? (en général puisque j'imagine que cela dépend des cas) Des conseils la dessus ? Peut etre des lectures à me conseiller?

    Merci en tout cas

  4. #4
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut
    Bonjour,
    Si tu veux extraire des infos de ton fichier, tu peux toujours faire du SQL.
    J'ai un bout de code pour ODBC sans ADO, avec QueryTable, (il faut
    générer le fichier FILEDSN avec openquery)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    repertoire = ThisWorkbook.Path & "\" & ThisWorkbook.Name
    sqlstring = "select * from [" & MaFeuille & "$" & "A4:AN1800" & "];"
    connstring = "ODBC;FILEDSN=D:\RH\masource.dsn;Database=repertoire"
    With sh.QueryTables.Add(Connection:=connstring, _
         Destination:=sh.Range("AZ1"), Sql:=sqlstring)
        .Refresh
    End With
    Ca peut être rapide mais dés que ca se complique, il vaut mieux faire avec ADO.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Ca à l'air de fonctionner, en fait je fais un Sheets("blabla").Range("MonRange).Calculate (car j'ai mis le calcul en mode manuel pour optimiser)
    puis je fais un DoEvents, et ça à l'air de fonctionner, je dis bien ça à l'air parce que j'arrive plus à reproduire le cas ou les résultats sont erronés
    En tout cas merci à vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/03/2014, 00h35
  2. Réponses: 9
    Dernier message: 02/05/2006, 21h17
  3. Attendre la fin des threads fils d'un processus
    Par SteelBox dans le forum Windows
    Réponses: 15
    Dernier message: 24/02/2006, 16h08
  4. utiliser données texte pour faire des calculs
    Par sarah67 dans le forum Access
    Réponses: 20
    Dernier message: 06/02/2006, 14h09
  5. [Système] Problème pour effectuer des calculs
    Par tissard dans le forum Langage
    Réponses: 10
    Dernier message: 09/12/2005, 14h07

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