Améliorer rapidité d'une Boucle

Bonjour à Tous !

En soit tout est dans le titre, j'ai trois boucles qui se suivent Je me demandais si il existait une autre manière de faire qui serrai plus rapide et peut être même plus simple à coder.. (Je sais très bien qu'il y a le TCD mais dans ce cas précis je ne peux pas l'utiliser)

Sub Bouclette ()
Feuil13.Range("A120:B200").Clear

For I = 6 To Feuil2.Range("L65536").End(xlUp).Row
        Feuil13.Cells(I + 114, 1).Value = Feuil2.Cells(I, 12).Value
        Feuil13.Cells(I + 114, 2).Value = Feuil2.Cells(I, 13).Value
Next I

LigFini = Feuil13.Range("A65536").End(xlUp).Row
For y = 6 To Feuil3.Range("L65536").End(xlUp).Row
        Feuil13.Cells(LigFini + 115, 1).Value = Feuil3.Cells(y, 12).Value
        Feuil13.Cells(LigFini + 115, 2).Value = Feuil3.Cells(y, 13).Value
    LigFini = LigFini + 1
Next y

LigFini2 = Feuil13.Range("A65536").End(xlUp).Row
For n = 6 To Feuil4.Range("L65536").End(xlUp).Row
        Feuil13.Cells(LigFini2 + 116, 1).Value = Feuil4.Cells(n, 12).Value
        Feuil13.Cells(LigFini2 + 116, 2).Value = Feuil4.Cells(n, 13).Value
    LigFini2 = LigFini2 + 1
Next n
End Sub

bonjour,

essaie ceci

Sub Bouclette()

    feuil13.Range("A120:B200").Clear

    dl = feuil2.Range("L65536").End(xlUp).Row - 4
    feuil2.Cells(6, 12).Resize(dl, 2).Copy
    feuil13.Cells(120, 1).Resize(3 * dl, 2).PasteSpecial xlPasteValues

End Sub

Salut Sebyg,

Salut H2so4,

exercice périlleux sans fichier, donc sans filet...

A noter que, dans le code suivant, ! à essayer sur une copie de ton fichier de travail !, les noms de feuille doivent être modifiés selon la réalité.

Tu utilises les CodeName des feuilles, mon code leur nom réel. Donc, ex : Feuil3 = disons, "BDD" ... Tu saisis ?

Ces précautions étant prises...

Sub Bouclette()
'
Application.ScreenUpdating = False
'
With Worksheets("Feuil13")
    .Range("A120:B200").Clear
    For x = 1 To 3
        iRow = Worksheets(Choose(x, "Feuil2", "Feuil3", "Feuil4")).Range("L" & Rows.Count).End(xlUp).Row - 5
        .Range("A" & WorksheetFunction.Min(120, .Range("A" & Rows.Count).End(xlUp).Row + 1)).Resize(1, iRow).Value = _
            Worksheets(Choose(x, "Feuil2", "Feuil3", "Feuil4")).Range("L6").Resize(iRow, 2).Value
    Next
End With
'
Application.ScreenUpdating = True
'
End Sub

A+

Bonjour à vous !

Effectivement curulis57 je vais préparer un filet

C'est toujours plus simple de bosser sur un fichier excel.

Ceci dit j'ai test vos codes, celui de h2so4 je crois qu'il prend en compte seulement une feuille.

Et celui de curulis57 me loupe tout

Je vous prépare ça ! mais par contre la macro est carrément plus rapide !!!!

C'était plutôt...

WorksheetFunction.Max(120, .Range("A" & Rows.Count).End(xlUp).Row + 1)

... + adapter le nom des feuilles mais nous attendons quand même le fichier, bien sûr!

A+

Bonjour j’ai en effet zappé le fait qu’il fallait copier à partir de feuilles différentes

Et voilà le Filet, bon je suis parti d'un fichier vierge sinon il était beaucoup trop gros..

Il faut imaginer qu'il y a des données un peu partout .. (Sauf en dessous du résultat souhaité bien sur)

Effectivement, à première vue, rien à voir avec la première demande !

Je regarde tout à l'heure!

A+

bonjour,

Une solution... en pièce jointe.

A+

Bonjour galopin01,

Heureusement que j'étais assis sur ma chaise pour rester poli... !!!!

Incroyable la vitesse de réalisation de la macro Waouwwww

Et en guise tu m'as appris un truc extraordinaire avec l'image2 ("=Feuil4!$A$118:$C$134")

Je en savais pas que c'était possible mais là ! Mille fois Merci !

J'essai de suite ceci sur mon fichier !

Incroyable la vitesse de réalisation de la macro

Et on pourrait encore l'accélérer avec

Application.ScreenUpdating  = False

Mais je l'ai pas mis car vu le peu de données au départ, le gain n'est pas énorme...

A+

Une fois adapté sur mon fichier les tests que j'ai pu effectuer sont Parfait !!

Je n'en revient pas de la vitesse par rapport à mon ancien code !

En tout cas Merci à vous de vous êtes penché sur ce sujet.

Petit plus, galopin01, est-il possible dans l'imagine2 ou tu as mis ("=Feuil4!$A$118:$C$134")

De mettre un truc du genre :

=Si(A1=Classe1;Feuil1!L6.currentregion;SI(A1=Classe2;Feuil2!L6.currentregion;SI(A1=Classe3;Feuil3!L6.currentregion;SiA1=Toute;Feuil4!A120.currentregion)

Non, mais il serait sans doute possible de modifier la formule grâce à une macro Worksheet_Change mais cela risque d'être délicat car cette shape n'est pas censé être à géométrie variable. De plus elle doit avoir une dimension exactement égale ou proportionnelle à la "zone source."

Dans l'exemple joint la modification des proportions reste plus ou moins aléatoire...

A+

En fait j'ai trouvé pourquoi la modif ne suivait pas :

J'avais oublié de décocher les options de proportionnalité dans les propriétés de l'image.

C'est corrigé.

A+

Bonjour Galopin01,

Je l'ai mis sur mon fichier ça fonctionne du tonnerre !!!

J'aurai vraiment appris quelque chose que je pourrai réutiliser sur d'autre Excel.

Merci beaucoup pour ton temps et ton partage, c'est génial !

Bonjour,

Oui c'est un outil intéressant quand on veut garder un oeil ailleurs...

Important : Cette image est issue de l'appareil photo Excel (faire une recherche sur ce terme)

L'appareil photo n'étant pas intuitif à installer, on arrive au même résultat en utilisant n'importe quelle image issue de Insertion>Image puis en écrivant l'adresse cible dans la barre de formule. (Attention à la syntaxe)

En outre il faut décocher les options de proportionnalité dans les propriétés du cadre image.

A+

Je ne connaissais pas "appareil photo Excel" je viens de lire un petit explicatif sur internet.

Effectivement je suis passer par Insertion>Image, j'ai bien décoché comme tu l'avais dit dans ton message auparavant !

Je suis vraiment ravi de cette découverte !

Rechercher des sujets similaires à "ameliorer rapidite boucle"