Macro affreusement longue!

Résolu/Fermé
roupille008 Messages postés 33 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 4 avril 2013 - 3 avril 2013 à 16:03
roupille008 Messages postés 33 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 4 avril 2013 - 4 avril 2013 à 11:46
Bonjour tout le monde,

J'ai une macro très simple et pourtant très longue.
Voici le code

Application.Calculation = xlCalculationManual
Application.DisplayStatusBar = True

Application.ScreenUpdating = False

    Columns("A:B").Select
    Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Paste
    
MsgBox ("on est sur la dernière feuille normalement")
    
Range(Cells(1, 1), Cells(3, 2)).Delete shift:=xlUp

alle = Application.WorksheetFunction.CountA(Range("A:A"))
      
    For eee = 1 To alle * 2 Step 2
    Cells(eee, 2) = Cells(eee, 2) / 1000
        Cells(eee + 1, 1).Insert shift:=xlDown
        Cells(eee + 1, 2).Insert shift:=xlDown
        Cells(eee + 1, 1) = Cells(eee, 1)
        Cells(eee + 1, 2) = Cells(eee, 2)
    Next eee
    
Application.Calculation = xlCalculationAutomatic
    
MsgBox ("les consos ont été doublées et il n'y a plus qu'a copier les colonnes")

    Columns("B:B").Select
    Selection.Copy
    Columns("C:C").Select
    ActiveSheet.Paste
    Range("D1").Select
    ActiveSheet.Paste
    Range("E1").Select
    ActiveSheet.Paste
    Range("F1").Select
    ActiveSheet.Paste
    Range("G1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
MsgBox ("allez lààààà")



Déjà avant je lui faisais insérer des lignes entières et il pouvait carrément pas faire la macro (mémoire insuffisante qu'il disait). Maintenant ça marche mais c'est impressionnant de la longueur de ce truc. ( bon j'avoue j'ai 130 000 lignes, mais quand même...)

J'ai pourtant fouillé sur les furoms et rajouté les ptites astuces qui vont bien mais rien n'y fait.
Je veux qu'il me double toutes les lignes.
Voilà, si quelqu'un trouve ça m'aiderait beaucoup.
A voir également:

3 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
3 avril 2013 à 19:00
Bonjour,

exemple de code, nom de feuille et cellule a adapter.

Option Base 1
Sub test()
    Dim tablo1, tablo2
    Dim indice As Long

    'derniere ligne colonne A
    alle = Application.WorksheetFunction.CountA(Worksheets("feuil1").Range("A:A"))
    
    ReDim tablo1(alle, 2)
    ReDim tablo2(alle * 2, 2)
    'mise en memoire des donnees a calculees
    tablo1 = Worksheets("feuil1").Range("A1:B" & alle)
    
    a = Timer
    'init comptage tablo2
    indice = 1
    'boucle de comptage
    For x = 1 To alle
        'boucle doublage
        For y = 1 To 2
            tablo2(indice, 1) = tablo1(x, 1)
            tablo2(indice, 2) = tablo1(x, 2) / 1000
            indice = indice + 1
        Next y
    Next x
    'ecriture des donnees calculees
    Worksheets("feuil1").Range("D1").Resize(UBound(tablo2, 1), UBound(tablo2, 2)) = tablo2

    MsgBox "temps: " & Timer - a
End Sub




Bonne suite
0
roupille008 Messages postés 33 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 4 avril 2013
4 avril 2013 à 10:04
Primo, merci de répondre au sujet.
Deuxio, j'ai essayé et ton code ne fonctionne pas chez moi.
Il me ressort au bout d'une seconde environ 1 seule colonne et pas les deux.
Tertio, par contre la colonne qu'il me sort a bien été doublé si l'on en croit le nombre de lignes.

Et vu que ton code est de plus haut vol que le mien, j'arrive pas à situer l'erreur.
J'vais me pencher dessus car vu qu'il n'a mis que 1 seconde pour me doubler une colonne, si il met 2 sec pour faire mes deux colonnes je serais le roi du monde!

Merci encore!
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
Modifié par f894009 le 4/04/2013 à 10:15
Bonjour,

Il me ressort au bout d'une seconde environ 1 seule colonne et pas les deux. le code que je vous ai donne donne deux colonnes D et E dans le fichier que j'ai utilise. Pour vous il faut l'adapter.

Et vu que ton code est de plus haut vol que le mien Non, c'est une vision differente de la programmation

Une seconde et quelque c'est normal meme si deux colonnes.

Si votre fichier n'a pas de donnees confidentielles, vous pouvez le mettre a dispo en cliquant sur ce lien: https://www.cjoint.com/

Si vous ne voulez pas que ce fichier soit public passez par les messages prive.

A+
0
roupille008 Messages postés 33 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 4 avril 2013
4 avril 2013 à 10:21
https://www.cjoint.com/?3DekuB6ileT

Voilà ce sur quoi je bosse. J'ai changé la deuxième colonne car c'était confidentiel.
J'ai testé la macro dessus, chez moi ça marche pas.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
4 avril 2013 à 10:35
Re,

Je recupere le fichier et vous tiens au courant.

A+
0
roupille008 Messages postés 33 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 4 avril 2013
4 avril 2013 à 11:46
Re,

Je sais pas si vous aviez prévu de passer du temps la dessus mais sachez que je me suis débrouillé avec ce que vous m'avez donné.
Vu qu'il me créé une colonne qui a bien été doublé, je lui demande de m'executer la macro deux fois. (avec les copier-coller de colonne qui vont bien).

Mais un grand merci quand même.

Vous m'avez fait gagner un temps précieux.

Merci!
0