begin process at 2012 02 16 06:44:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

Aide pour alléger une macro


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Aide pour alléger une macro

mardi 7 juillet 2009 à 08:57:39 | Aide pour alléger une macro

grosboufLG

Salut tout le monde,

Je vais peut être paraitre culotté mais j'espère que non....
En fait je suis débutant (du moins je l'étais vraiment il y a 1semaine mais j'ai un peu progressé du coup) et j'ai réalisé une petite macro.
Par contre vu que je débute j'ai pas du l'optimiser complétement parce que je la trouve particulièrement lente à s'executer.
Je voulais donc savoir si en vous la mettant en ligne vous pouviez jeter un coup d'oeil et corriger certaines conneries qui me bouffent un temps fou...

Merci d'avance à tous ceux qui se pencheront sur mon fichier pour me donner un coup de main

PS : je joinds 3 fichiers texte pour pouvoir faire 3imports. Au début du lancement de mon fichier excel on vous invite à dire combien vous voulez ouvrir de fichiers ( vous pouvez donc en ouvrir jusqu'à trois).

Vous allez trouver la macro pas si lente avec ces fichiers la parce qu'ils ne sont pas long. Les "vrais" fichiers feront plus de 2000lignes donc c'est beaucoup BEAUCOUP plus long..

Dernière info, avant de sortir du fichier il faut supprimer toutes les feuille et ne laisser qu'une seule feuille Nommée Feuil1 complétement vide

Le fichier : http://www.megaupload.com/?d=X1HMBFPV
mardi 7 juillet 2009 à 09:02:24 | Re : Aide pour alléger une macro

Renfield

Administrateur CodeS-SourceS
postes ici, c'est galère sans cela.

postes des points bloquants précis, au pire.

là, tu nous demande de faire ton boulot.........
mardi 7 juillet 2009 à 09:16:23 | Re : Aide pour alléger une macro

grosboufLG

Pardo Renfield....

Je vais essayé de te faire une séléction de ce qui ralenti le plus (cela dit si les autres veulent bien regarder en global la macro ça serait top)

1) "Scann" de toutes les lignes pour retirer les doublons et ainsi ne garder qu'un exemplaire du titre de chaque sous chapitre

Sheets("Calcul").Select
    NouvNbreLignes = Application.CountA(Range("A1:A65536")) + 4
    Sheets("Calcul").Range(Cells(5, 3), Cells(NouvNbreLignes, 3)).Select
    Selection.Copy
    Sheets("Choix Chapitres").Select
    Range("A5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
    Cells(5, 2).Select
    ActiveCell.FormulaR1C1 = "=PROPER(RC[-1])"
    Selection.AutoFill Destination:=Range(Cells(5, 2), Cells(NouvNbreLignes, 2)), Type:=xlFillDefault
           
    Range(Cells(5, 2), Cells(NouvNbreLignes, 2)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("A5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("B:B").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft

    Range("A5").Select
    donnee1 = ActiveCell
    ActiveCell.Offset(1, 0).Select
    While ActiveCell <> ""
    If ActiveCell = donnee1 Then
 
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, 0).Select
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
Else
 donnee1 = ActiveCell
 ActiveCell.Offset(1, 0).Select
 End If

Wend


2) Création de CheckBox dans une colonne pour toutes les lignes (parfois il y a plus de 200lignes....)

Pour les x feuilles présentes dans l'analyse que souhaite faire l'utilisateur on se retrouve avec ca :

Sub InsertionCheckFeuilx()


    Dim x As Integer
    Dim i As Integer
  
   
'Boucle de 1 à Compteur, pour répéter l'opération sur toutes les feuilles concernées.
    For x = 1 To Compteur
    Worksheets(x).Select
    NbreLignes = Application.CountA(Range("E1:E65536")) + 3
    Range("T4").Select
    ActiveCell.FormulaR1C1 = "Pris en compte"
    With ActiveCell.Characters(Start:=1, Length:=14).Font
        .Name = "Arial"
        .FontStyle = "Gras"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Range("T4").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThick
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThick
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThick
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThick
        .ColorIndex = xlAutomatic
    End With
    Range(Cells(5, 20), Cells(NbreLignes, 20)).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
          For i = 5 To NbreLignes
          Worksheets(x).Activate
          Cells(i, 20).Select
          t = ActiveCell.Top
          l = ActiveCell.Left
          Set obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
               DisplayAsIcon:=False, Left:=l + 30, Top:=t + 2, Width:=10, Height:=10 _
               )
        Next i
        NbreTaches = NbreLignes - 4
        For k = 1 To NbreTaches
        Worksheets(x).OLEObjects(k).Object.Value = True
        Next k
        Cells(5, 21).Select
        ActiveCell.FormulaR1C1 = "TRUE"
        Selection.AutoFill Destination:=Range("U5:U" & NbreLignes & ""), Type:=xlFillDefault
       
    ActiveSheet.Buttons.Add(1508.25, 20.25, 57.75, 15.75).Select
    Selection.OnAction = "Bouton2_QuandClic"
    Selection.Characters.Text = "Mise à jour"
    With Selection.Characters(Start:=1, Length:=11).Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Columns("U:U").Select
    Selection.Font.ColorIndex = 2
      Next x
    
End Sub




Voila je pense que la se trouvent les 2principaux points noirs. Après le reste doit pas être trop méchant

mardi 7 juillet 2009 à 22:07:20 | Re : Aide pour alléger une macro

jmf0

Membre Club
Bonjour,

La plupart de tes select sont autant de sources de lenteurs !...
Réfère-toi directement aux plages, plutôt que de les sélectionner systémùatiquement en vue d'y travailler !
mercredi 8 juillet 2009 à 09:53:11 | Re : Aide pour alléger une macro

grosboufLG

Merci jmf0,

En fait j'ai procédé au nettoyage des select et j'y gagne un peu de temps mais les deux points les + compliqués (que je te recolle en dessous) et qui sont ceux qui bouffent le + de temps je n'arrive pas à les transformer.
C'est possible de faire un truc avec ca ?

          For i = 5 To NbreLignes
          Worksheets(x).Activate
          Cells(i, 20).Select
          t = ActiveCell.Top
          l = ActiveCell.Left
          Set obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
               DisplayAsIcon:=False, Left:=l + 30, Top:=t + 2, Width:=10, Height:=10 _
               )
        Next i

        NbreTaches = NbreLignes - 4
        For k = 1 To NbreTaches
        Worksheets(x).OLEObjects(k).Object.Value = True
        Next k



ET le deuxieme poits noir :




    Range("A5").Select
    donnee1 = ActiveCell
    ActiveCell.Offset(1, 0).Select
    While ActiveCell <> ""
    If ActiveCell = donnee1 Then
 
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, 0).Select
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
Else
 donnee1 = ActiveCell
 ActiveCell.Offset(1, 0).Select
 End If

Wend

 

mercredi 8 juillet 2009 à 10:48:02 | Re : Aide pour alléger une macro

Renfield

Administrateur CodeS-SourceS
vire les .Select, les ActiveCell et autres gadgets visuels

par exemple:

Dim oCell As Range
Dim sFind As String
Set oCell = Cells(6, 1)
    sFind = Cells(5, 1).Text
    Do While LenB(oCell.Text)
        If oCell.Text = sFind Then
            Set oCell = oCell.Offset(1, 0)
            oCell.Offset(-1, 0).EntireRow.Delete
        Else
            Set oCell = oCell.Offset(1, 0)
        End If
    Loop


Cette discussion est classée dans : fichier, aide, macro, fichiers, coup


Répondre à ce message

Sujets en rapport avec ce message

automatisation macro [ par fredo35m ] Bonjour,j'ai plusieurs fichiers dans un même répertoire et je souhaite pouvoir effectué la même manipulation sur l'ensemble des fichiers de ce réperto petite aide [ par njo80 ] Bonjour,Je suis novice en vba et j'ai un petit problèmeJe dois importer le contenu de fichiers .txt dans excel.Mais les noms de ces fichiers varient t Besoin d'aide pour enregistrer un fichier [ par jeremilie ] Voila mon problème, j'ai un fichier que j'enregistre à l'aide d'une macro,le nom du fichier est defini cmme valeur d'une certaine cellule.Hors quand j [VBA Excel] Fichier d'aide [ par tof008 ] Bonjour à tous! J'aurais voulu savoir s'il était possible d'attacher un fichier d'aide à des fichiers Excel. Ceci me serait utile car j'ai crée des ma Création d'une table des matières [ par mastere30 ] Bonjour à tous,afin de m'aider moi ainsi que mes collègues de travail j'ai crée un fichier excel dans le quel je répertorie tous les documents importa besoin d'aide pour une macro excel [ par squallxx ] <td id="HB_Focus_Element" valign="top" width="100%" b aide VBA macro excel [ par yagami13 ] Bonjour à tous,j'aurai souhaiter un peit peu d'aide pour créer une macro sous excel .....Voila ce que je veux faire : j'ai 2 fichiers excel distinct " macro commune à tous les fichiers [ par lili9578 ] Bonjour,je souhaite réaliser une macro qui pourrait être appelée par n'importe quel fichier Excel. Je m'explique : lorsque je créer un nouveau fichier Besoin d'aide pour une macro en visual basic [ par raikkonen3 ] Bonjour,Je travaille donc sur un fichier excel et je dois réaliser une manipulation sur le fichier afin d'automatiser la chose pour vérifier certaines prise d'info dans un fichier excel avec la macro [ par DenisBE ] Bonjour J'aurai voulu faire à l'aide d'une macro rechercher une ref, demandé par l'utilisateur, dans un fichier Excel et affiche la bonne page.Ce fich


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales