XL 2016 OPTIMISATION CODE VBA

sevy1

XLDnaute Occasionnel
Bonjour à tous
J'ai un fichier avec deux onglets le premier est sous forme de plage et le second sous forme de tableau .
Je souhaiterais couper et coller les données de l'onglet 1 vers l'onglet 2 lorsque la date est saisie dans la colonne 13 de l'onglet 1. je ne coupe pas toute la ligne parce que dans l'onglet 2 j'ai 4 colonnes supplémentaires à la fin ou se trouvent les formules.
Mon Problème c'est que le code fonctionne mais il est excessivement lent car j'ai plus de 25000lignes dans l'onglet 1 comment puis-je améliorer ce code pour être rapide. Merci d'avance pour vos propositions

Code:
Dim sh1, sh2 As Worksheet
Sub Transfert_Donnees()
    Dim derlig, i, j As Long
    Set sh1 = Feuil4
    Set sh2 = PAYE
    derlig = sh2.Cells(Rows.Count, 1).End(xlUp).Row + 1
    j = sh1.Cells(Rows.Count, 1).End(xlUp).Row
    Application.ScreenUpdating = False
    For i = 2 To j
        If sh1.Cells(i, 9) > 0 Then
            sh1.Range(Cells(i, 1), Cells(i, 13)).Cut sh2.Cells(derlig, 1)
            derlig = derlig + 1
        End If
        Next
        For i = j To 2 Step -1
            If sh1.Cells(i, 1) = "" Then sh1.Range(Cells(i, 1), Cells(i, 13)).Delete shift:=xlUp
        Next
    Application.ScreenUpdating = True
End Sub
 

sevy1

XLDnaute Occasionnel
Bonjour à tous
Merci pour vos multiples solutions qui fonctionnent. Pour les explications j'ai bien compris que end (3) =end (xlup) après le (3) il y a soit 2 soit (1, 5) est ce à dire que on s arrêté à la ligne 2 pour la cas 1 et la ligne 1 pour le cas 2 commençant par le bas
 

Efgé

XLDnaute Barbatruc
Bonjour à tous

après le (3) il y a soit 2 soit (1, 5) est ce à dire que on s arrêté à la ligne 2 pour la cas 1 et la ligne 1 pour le cas 2 commençant par le bas

Chaque cellule de la feuille peut être vue comme la cellule (1,1) d'un tableau.
En disant Cells(3,2)(1,2) on dit:
Cells(3,2) = Cellule ($B$3)
La cellule $B$3(1,2) est la cellule sur la même ligne et sur la colonne à coté à droite soit $C$3

Donc, la partie
Code:
.Cells(.Rows.Count, 1).End(3)(1, 5)
Veux dire : la dernière cellule remplie en colonne 1 , même ligne, 5eme colonne. (dans ton exemple $E$8 )

Si on utilise
Code:
.Cells(.Rows.Count, 1).End(3)(2)
On dit La dernière cellule remplie en colonne 1 , ligne 2 soit la première cellule non remplie en colonne 1
On pourrait écrire
Code:
.Cells(.Rows.Count, 1).End(3)(2,1)
(ligne 2 colonne 1)

Cordialement
 

Efgé

XLDnaute Barbatruc
Dernière édition:

Discussions similaires

Réponses
7
Affichages
312

Statistiques des forums

Discussions
312 103
Messages
2 085 325
Membres
102 862
dernier inscrit
Emma35400