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 macro pour gagner du temps


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut Optimisation macro pour gagner du temps
    Bonjour,

    Savez-vous comment je pourrais optimiser la macro ci-dessous ?
    C'est un Userform qui charge des lignes dans une listbox.
    Quand on clique sur un item de la listbox, puis sur le bouton "générer", ça génère un nouveau classeur, la feuille se remplit d'après un modèle.
    Le classeur va s'enregistrer automatiquement dans un dossier.

    Le temps que le nouveau classeur se génère, cela peut prendre 1 minute. A savoir que chaque semaine, on doit générer une quarantaine de classeur.
    Il faudrait que ça soit instantané ....


    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Private Sub Boutongénérer_click()
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
     
     
    Dim I, numlign
     
     
    For I = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(I) = True Then
            numlign = ListBox1.List(I, 9)
        End If
    Next I
     
    Columns("aj:aj").Select
        numlign = selection.Find(What:=numlign, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).EntireRow.Select
     
            ActiveCell.Offset(0, 26).Value = TextBox6
            ActiveCell.Offset(0, 27).Value = TextBox1
            ActiveCell.Offset(0, 28).Value = TextBox2
            ActiveCell.Offset(0, 29).Value = TextBox3
            ActiveCell.Offset(0, 30).Value = TextBox4
            ActiveCell.Offset(0, 31).Value = TextBox5
            ActiveCell.Offset(0, 1).Value = cb
            ActiveCell.Offset(0, 5).Value = cbformation
            ActiveCell.Offset(0, 14).Value = cborganisme
            ActiveCell.Offset(0, 15).Value = cblieu
            ActiveCell.Offset(0, 9).Value = cbsemaine
            ActiveCell.Offset(0, 32).Value = T13
            ActiveCell.Offset(0, 33).Value = T14
            ActiveCell.Offset(0, 13).Value = T7
     
     
            Worksheets("Modèle").Copy After:=Worksheets(ThisWorkbook.Sheets.Count)
            ActiveCell.Select
            ActiveSheet.Name = cb.Value
     
            With Worksheets(ThisWorkbook.Sheets.Count) 'avec l'onglet créé
     
                'on remplit notre modèle comme on veut...
                .range("AD2") = cb.Value
                .range("A4") = cbformation.Value
                .range("P8") = cborganisme.Value & " à " & cblieu.Value
                .range("AH8") = TextBox1.Value
                .range("AK8") = TextBox2.Value
                .range("AN8") = TextBox3.Value
                .range("AQ8") = TextBox4.Value
                .range("AT8") = TextBox5.Value
                .range("AY2") = cbsemaine.Value
                .range("AU3") = T13.Value
                .range("BA3") = T14.Value
                .range("P10") = "Formation" & " " & T7.Value
                .range("A57") = TextBox6.Value
     
     
            End With
            ActiveSheet.Move 'Déplace la feuille générée à partir du modèle vers un nouveau classeur
     
     
        ChDir "C:\3-EMPLOI\Form\Form 2017"
        ActiveWorkbook.SaveAs Filename:="C:\3-EMPLOI\Form\Form 2017\" & cb.Value & " - Semaine " & cbsemaine.Value & " - (" & cbformation.Value & ")" & ".xlsm", FileFormat:= _
            xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
     
     
     
     
     
         Windows("SUIVI EMPLOI.xlsm").Activate
        Sheets("Suivi").Select
     
     
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
     
    End Sub

    merci !

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Déjà : je ne comprends pas pourquoi ces lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For I = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(I) = True Then
            numlign = ListBox1.List(I, 9)
        End If
    Next I
    qui sont telles que, si la listbox est en multiselect, numlign sera ce qu'il y a en colonne 9 de l'article de plus grand index qui s'y trouve sélectionné.
    Quelle est la raison de cette boucle ?

    D'ailleurs : peux-tu nous dire avec précision quels sont les tenants et aboutissants ?

  3. #3
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    La listbox n'est pas en multiselect.
    Dans mon tableau, en fin de ligne, j'ai des numéros uniques qui s'inscrive lorsqu'on y ajoute des données.
    Ainsi je récupère les numéros uniques pour alimenter la listbox grâce à une Function.
    De ce fait, quand je clique sur un item de la listbox, il récupère le numéro de ligne pour la sélectionner dans le tableau.
    Ca fonctionne très bien.

    Je souhaite "simplement" améliorer le temps de réponse de la macro.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    La listbox n'est pas en multiselect.
    Alors pourquoi la parcourir en boucle ?
    Soit toto le nom de ta listbox
    est l'index cliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Toto.list(toto.listindex,9)
    est le contenu de la colonne 9 de l'article cliqué (en te rappelant que l'index de la colonne 1 est-0)
    Tu n'as pas répondu clairement à :
    D'ailleurs : peux-tu nous dire avec précision quels sont les tenants et aboutissants ?
    parle-nous de ce que contient cette listbox, comment elle est alimentée, etc ...

Discussions similaires

  1. [CR XI] Comment se passer d'un sous report pour gagner du temps de traitement ?
    Par Adricube dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 18/11/2014, 12h06
  2. Réponses: 0
    Dernier message: 05/10/2014, 16h32
  3. Réponses: 1
    Dernier message: 26/06/2009, 15h27
  4. Optimisation code pour gagner en rapidité
    Par polodu84 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/03/2008, 15h32
  5. Sunopsis - Paralléliser 2 packages pour gagner du temps ?
    Par claclapub dans le forum Alimentation
    Réponses: 0
    Dernier message: 23/07/2007, 15h29

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