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 :

Accélérer une formule ActiveCell


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut Accélérer une formule ActiveCell
    Bonjour à tous,
    Voici mon problème, la formule ci-dessou prend plus de 2 minutes de calcul, sachant que je ne vous ai posté qu'une partie, il y a 12 autres, toutes identiques, seul les emplacement change.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     [A65000].End(xlUp).Offset(1, 0).Select
       ActiveCell.Offset(0, 0).Value = (CBarc1)
       ActiveCell.Offset(0, 1).Value = CBnom.Value
       ActiveCell.Offset(0, 2).Value = TBsem.Value
       ActiveCell.Offset(0, 3).Value = (TextBox1)
       ActiveCell.Offset(0, 4).Value = (TextBox2)
       ActiveCell.Offset(0, 5).Value = (TextBox3)
       ActiveCell.Offset(0, 6).Value = (TextBox4)
       ActiveCell.Offset(0, 7).Value = (TextBox5)
       ActiveCell.Offset(0, 8).Value = (TextBox6)
       ActiveCell.Offset(0, 9).Value = (TextBox7)
       ActiveCell.Offset(0, 10).Value = (TextBox8)
       ActiveCell.Offset(0, 11).Value = (TextBox9)
       ActiveCell.Offset(0, 12).Value = (TextBox10)
       ActiveCell.Offset(0, 13).Value = (TextBox11)
       ActiveCell.Offset(0, 14).Value = (TextBox12)
       ActiveCell.Offset(0, 15).Value = (TextBox13)
       ActiveCell.Offset(0, 16).Value = (TextBox14)
       ActiveCell.Offset(0, 17).Value = (TextBox15)
       ActiveCell.Offset(0, 18).Value = (TextBox16)
       ActiveCell.Offset(0, 19).Value = (TextBox17)
       ActiveCell.Offset(0, 20).Value = (TextBox18)
       ActiveCell.Offset(0, 21).Value = (TextBox19)
       ActiveCell.Offset(0, 22).Value = (TextBox20)
       ActiveCell.Offset(0, 23).Value = (TextBox21)
       ActiveCell.Offset(0, 24).Value = (TextBox22)
       ActiveCell.Offset(0, 25).Value = (TextBox23)
       ActiveCell.Offset(0, 26).Value = (TextBox24)
       ActiveCell.Offset(0, 27).Value = (TextBox25)
       ActiveCell.Offset(0, 28).Value = (TextBox26)
       ActiveCell.Offset(0, 29).Value = (TextBox27)
       ActiveCell.Offset(0, 30).Value = (TextBox28)
       ActiveCell.Offset(0, 31).Value = (TextBox29)
       ActiveCell.Offset(0, 32).Value = (TextBox30)
       ActiveCell.Offset(0, 33).Value = (TextBox31)
       ActiveCell.Offset(0, 34).Value = (TextBox32)
       ActiveCell.Offset(0, 35).Value = (TextBox33)
       ActiveCell.Offset(0, 36).Value = (TextBox34)
       ActiveCell.Offset(0, 37).Value = (TextBox35)
    Est il possible de raccourcir cette formule, par exemple regrouper toutes les lignes en un seule ?

    Merci pour vos réponses.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Cela va dépendre de la réponse à cette question :
    Que sont Textbox1, Textbox2, etc... ? Sont-ce des TextBoxes placées sur un UserForm ?
    Si oui, une boucle est alors possible.

    Il est peut-être adroit, par ailleurs, d'inhiber la mise à jour de l'affichage pendant cette opération et de la rétablir à la fin.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut
    Citation Envoyé par ucfoutu
    Bonjour,

    Cela va dépendre de la réponse à cette question :
    Que sont Textbox1, Textbox2, etc... ? Sont-ce des TextBoxes placées sur un UserForm ?
    Si oui, une boucle est alors possible.
    Oui pardon, C'est dans un userform, il y a plus de 420 valeurs de cellule à recopier dans une feuille excel.

    Je ne connais pas "les boucles" Comment puis je faire ?

    Merci de ta réponse

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Je ne vais pas écrire ton code, mais attends de toi que tu y parviennes avec ces seules indications :

    Exemple de boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 3 to 9
      msgbox i
    next
    tu verras que i y prend successivement les valeurs 3,4,...9

    regarde maintenant ton propre code, dont ici quelques lignes
    ActiveCell.Offset(0, 3).Value = (TextBox1)
    ActiveCell.Offset(0, 4).Value = (TextBox2)
    ActiveCell.Offset(0, 5).Value = (TextBox3)
    ActiveCell.Offset(0, 6).Value = (TextBox4)

    regarde bien ce que j'ai mis en rouge et que tu peux associer à la valeur de i dans une boucle For i... comme celle montrée

    La difficulté sera de te référer aux textboxes, puique tu ne peux le faire en "pointant" vers TextBox & i ...

    Solution : Il existe la collection Controls .
    Et :

    Controls("TextBox" & i) pointera vers la TextBox TextBox1 si i = 1, TextBox2 si i = 2 etc...
    Il t'appartient maintenant de travailler avec ce que je viens de t'exposer.

    Bonne continuation.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut
    Merci, je vais travailler la dessu

    @ bientot !

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut
    La boucle n'accélère pas l'enregistrement, mais au contraire le ralentie encore plus !

    Je vais essayer d'expliquer au mieux :
    Dans un UserForm, j'ai 12 lignes composés de 35 TextBox chaqu'une.
    En cliquant sur "button" j'enregistre le contenu des TextBox dans une feuille de calcul excel, sachant que pour chaque ligne de l'UserForm, je créer au temps de nouvelles lignes dans ma feuille Excel.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sheets("hemploye").Select
     
     If CBnom = "" Then
     MsgBox "Veuillez sélectionner un employé !"
     CBnom.SetFocus
     Exit Sub
     End If
     If TBsem = "" Then
     MsgBox "Veuillez inscrire le numéro de semaine !"
     TBsem.SetFocus
     Exit Sub
     End If
      If CBarc1 = "" Then
     MsgBox "Veuillez sélectionner un numéro d'ARC !"
     CBarc1.SetFocus
     Exit Sub
     End If
    [A65000].End(xlUp).Offset(1, 0).Select
       ActiveCell.Offset(0, 0).Value = (CBarc1)
       ActiveCell.Offset(0, 1).Value = CBnom.Value
       ActiveCell.Offset(0, 2).Value = TBsem.Value
       ActiveCell.Offset(0, 3).Value = (TextBox1)
       ActiveCell.Offset(0, 4).Value = (TextBox2)
       ActiveCell.Offset(0, 5).Value = (TextBox3)
       ActiveCell.Offset(0, 6).Value = (TextBox4)
       ActiveCell.Offset(0, 7).Value = (TextBox5)
       ActiveCell.Offset(0, 8).Value = (TextBox6)
       ActiveCell.Offset(0, 9).Value = (TextBox7)
       ActiveCell.Offset(0, 10).Value = (TextBox8)
       ActiveCell.Offset(0, 11).Value = (TextBox9)
       ActiveCell.Offset(0, 12).Value = (TextBox10)
       ActiveCell.Offset(0, 13).Value = (TextBox11)
       ActiveCell.Offset(0, 14).Value = (TextBox12)
       ActiveCell.Offset(0, 15).Value = (TextBox13)
       ActiveCell.Offset(0, 16).Value = (TextBox14)
       ActiveCell.Offset(0, 17).Value = (TextBox15)
       ActiveCell.Offset(0, 18).Value = (TextBox16)
       ActiveCell.Offset(0, 19).Value = (TextBox17)
       ActiveCell.Offset(0, 20).Value = (TextBox18)
       ActiveCell.Offset(0, 21).Value = (TextBox19)
       ActiveCell.Offset(0, 22).Value = (TextBox20)
       ActiveCell.Offset(0, 23).Value = (TextBox21)
       ActiveCell.Offset(0, 24).Value = (TextBox22)
       ActiveCell.Offset(0, 25).Value = (TextBox23)
       ActiveCell.Offset(0, 26).Value = (TextBox24)
       ActiveCell.Offset(0, 27).Value = (TextBox25)
       ActiveCell.Offset(0, 28).Value = (TextBox26)
       ActiveCell.Offset(0, 29).Value = (TextBox27)
       ActiveCell.Offset(0, 30).Value = (TextBox28)
       ActiveCell.Offset(0, 31).Value = (TextBox29)
       ActiveCell.Offset(0, 32).Value = (TextBox30)
       ActiveCell.Offset(0, 33).Value = (TextBox31)
       ActiveCell.Offset(0, 34).Value = (TextBox32)
       ActiveCell.Offset(0, 35).Value = (TextBox33)
       ActiveCell.Offset(0, 36).Value = (TextBox34)
       ActiveCell.Offset(0, 37).Value = (TextBox35)
    Le code ci-dessu fonctionne parfaitement, mais est très long à l'exécution, (14 secondes) sachant qu'il est 12 fois dans mon code...

    La boucle ne fonctionnant pas plus vite, auriez vous une autre solution ?

    Merci

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/01/2005, 16h24
  2. Déterminer Algo pour une formule mathématique
    Par jekyll_omiwane dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 07/01/2005, 18h28
  3. Mauvais résultat aprés une formule de calcul complexe
    Par poufouille dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 00h12
  4. Accélérer une requête
    Par bencot dans le forum SQL
    Réponses: 15
    Dernier message: 27/01/2004, 14h51
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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