Macro couper / coller en bas
Résolu
Julien
-
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
A l'aide d'internet et de votre forum, j'ai réalisé une macro afin de couper certaines lignes de l'onglet "Data" dans l'onglet "BDD", uniquement si dans la quarantième colonne est inscrit "Terminé!". L'objectif étant d'archiver les lignes qui sont soldés dans un onglet différent.
La macro fonctionnait correctement et assez rapidement, mais je pense que le fait que le fichier contienne de plus en plus de lignes, cela ralenti la macro énormément...
A l'heure actuelle la macro prend trop de temps pour s'exécuter, quelqu'un a-t-il une solution ?
Merci
Julien
A l'aide d'internet et de votre forum, j'ai réalisé une macro afin de couper certaines lignes de l'onglet "Data" dans l'onglet "BDD", uniquement si dans la quarantième colonne est inscrit "Terminé!". L'objectif étant d'archiver les lignes qui sont soldés dans un onglet différent.
La macro fonctionnait correctement et assez rapidement, mais je pense que le fait que le fichier contienne de plus en plus de lignes, cela ralenti la macro énormément...
A l'heure actuelle la macro prend trop de temps pour s'exécuter, quelqu'un a-t-il une solution ?
Sub Transfert()
reponse = MsgBox("Voulez-vous transférer les retours soldés ?", vbYesNo, "Transfert")
If reponse = vbYes Then
Application.ScreenUpdating = False
Dim iLI As Integer
Dim iRE As Integer
Dim LI As Worksheet
Dim re As Worksheet
Set LI = Worksheets("Data")
Set re = Worksheets("BDD")
iLI = 6
For iLI = 7 To 10000
If LI.Cells(iLI, 40).Text = "Terminé!" Then
LI.Range(iLI & ":" & iLI).Copy re.Cells(Rows.Count, 1).End(xlUp)(2)
LI.Range(iLI & ":" & iLI).Delete
iRE = iRE + 1
iLI = iLI - 1
End If
Next
Else
End If
Application.ScreenUpdating = True
End Sub
Merci
Julien
A voir également:
- Macro couper / coller en bas
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Couper une video - Guide
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Couper une photo en 3 pour instagram - Guide
- Historique copier coller - Guide
7 réponses
Bonjour,
Je te propose de tester de cette façon pour laisser faire la boucle à excel et rester sur la plage utile.
Je te propose de tester de cette façon pour laisser faire la boucle à excel et rester sur la plage utile.
Sub Transfert()
Dim reponse
Dim iLI As Integer
Dim iRE As Integer
Dim LI As Worksheet
Dim re As Worksheet
Dim elm As Range
Application.ScreenUpdating = False
reponse = MsgBox("Voulez-vous transférer les retours soldés ?", vbYesNo, "Transfert")
If reponse = vbYes Then
Set LI = Worksheets("Data")
Set re = Worksheets("BDD")
For Each elm In LI.UsedRange.Columns(40).Cells
If elm.Text = "Terminé!" Then
LI.Rows(elm.Row).Copy re.Cells(Rows.Count, 1).End(xlUp)(2)
End If
Next elm
End If
Application.ScreenUpdating = True
End Sub
Bonjour,
Merci pour ton retour, je viens de tester et le temps d'exécution de la macro est toujours très long voir elle plante.
J'ai l'impression que c'est lié au fait que dans l'onglet "BDD" il y a environ 600 lignes et que c'est la copie à la dernière ligne qui rallonge la macro... mais je ne trouve pas de solution bis à la solution "End(xlUp)(2)" pour confirmer ou non.
Julien
Merci pour ton retour, je viens de tester et le temps d'exécution de la macro est toujours très long voir elle plante.
J'ai l'impression que c'est lié au fait que dans l'onglet "BDD" il y a environ 600 lignes et que c'est la copie à la dernière ligne qui rallonge la macro... mais je ne trouve pas de solution bis à la solution "End(xlUp)(2)" pour confirmer ou non.
Julien
Bonjour
sans ton fichier on ne peux pas savoir car tu a peux etre d'autre macro qui s'active ?
A+
Maurice
sans ton fichier on ne peux pas savoir car tu a peux etre d'autre macro qui s'active ?
A+
Maurice
Bonjour
ca marche pas
Ci-dessous La procédure
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com
Va sur ce site : http://cjoint.com
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse
ca marche pas
Ci-dessous La procédure
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com
Va sur ce site : http://cjoint.com
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse
Bonjour,
Je me doutais bien que l'amélioration ne serait pas spectaculaire, alors en utilisant une autre technique cela devrait mieux aller :
Je me doutais bien que l'amélioration ne serait pas spectaculaire, alors en utilisant une autre technique cela devrait mieux aller :
Sub Transfert()
Dim reponse
Dim iLI As Long
Dim iRE As Long
Dim col As Long
Dim tLI(), tRE()
Application.ScreenUpdating = False
reponse = MsgBox("Voulez-vous transférer les retours soldés ?", vbYesNo, "Transfert")
If reponse = vbYes Then
tLI = Worksheets("Data").UsedRange.Cells.Value
ReDim tRE(1 To UBound(tLI), 1 To UBound(tLI, 2))
iRE = 1
For iLI = 1 To UBound(tLI)
If tLI(iLI, 40) = "Terminé!" Then
For col = 1 To UBound(tLI, 2)
tRE(iRE, col) = tLI(iLI, col)
Next col
iRE = iRE + 1
End If
Next iLI
With Worksheets("BDD")
iLI = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(UBound(tLI), UBound(tLI, 2)).Value = tRE
End With
With Worksheets("Data")
For iLI = UBound(tLI) To 1 Step -1
If tLI(iLI, 40) = "Terminé!" Then .Rows(iLI).Delete
Next iLI
End With
End If
Application.ScreenUpdating = True
MsgBox iRE - 1 & " lignes transférées"
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
une autre facon on desactive tout car tu a beaucoup de function
A+
Maurice
une autre facon on desactive tout car tu a beaucoup de function
Sub Transfert()
Dim iLI As Integer
Dim NmbLig As Integer
Dim Lig As Integer
Dim Reponse As String
Reponse = MsgBox("Voulez-vous transférer les retours soldés ?", vbYesNo, "Transfert")
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlManual
End With
If Reponse = vbYes Then
With Feuil2
' With Worksheets("BDD")
NmbLig = Cells(Rows.Count, 1).End(xlUp).Row
Lig = .Cells(Rows.Count, 1).End(xlUp).Row + 1
For iLI = NmbLig To 7 Step -1
If Cells(iLI, 40).Text = "Terminé!" Then
Rows(iLI).Copy
.Cells(Lig, 1).PasteSpecial xlPasteValues
Rows(iLI).Delete
Lig = Lig + 1
End If
Next
End With
End If
With Application
.CutCopyMode = False
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlAutomatic
End With
MsgBox "Transfert Terminé"
End Sub
A+
Maurice
Bonjour julien,
Pourtant, j'ai essayé sur le classeur que tu as posté et pour moi c'est pratiquement instantané : 2 secondes !

Pourtant, j'ai essayé sur le classeur que tu as posté et pour moi c'est pratiquement instantané : 2 secondes !

gbinforme,
Je viens de test à nouveau ta dernière solution, idem que précédemment... Temps d'exécution beaucoup trop long.
J'ai donc retesté avec ta macro toujours mais en supprimant quasi toutes les lignes de l'onglet "BDD" et le transfert se fait en quelques secondes, une dizaine max.
Le problème pourrait-il venir du PC ?
Julien
Je viens de test à nouveau ta dernière solution, idem que précédemment... Temps d'exécution beaucoup trop long.
J'ai donc retesté avec ta macro toujours mais en supprimant quasi toutes les lignes de l'onglet "BDD" et le transfert se fait en quelques secondes, une dizaine max.
Le problème pourrait-il venir du PC ?
Julien
en supprimant quasi toutes les lignes de l'onglet "BDD"
avec la dernière macro, cela n'a strictement aucune importance.
Le problème pourrait-il venir du PC ?
il a quelles particularités ? il est lent habituellement ?
J'ai rajouté la macro à ton classeur et l'ai affectée au bouton "archive" :
https://www.cjoint.com/c/ECgmzpwjoWd
Tu testes et tu me donnes le résultat, un peu plus de 2 secondes pour moi.
avec la dernière macro, cela n'a strictement aucune importance.
Le problème pourrait-il venir du PC ?
il a quelles particularités ? il est lent habituellement ?
J'ai rajouté la macro à ton classeur et l'ai affectée au bouton "archive" :
https://www.cjoint.com/c/ECgmzpwjoWd
Tu testes et tu me donnes le résultat, un peu plus de 2 secondes pour moi.

J'avais pas attendu la fin de la macro quand j'ai testé sur mon PC, c'est en testant sur le pc d'un collègue que celui-ci m'a dit que ça avait duré plus ou mois 5 à 10 min..
Bonjour,
Le problème venait d'excel 2010/2013 qui rame pour supprimer les lignes alors que sur 2007 il n'y a pas le problème.
Une version qui devrait être plus rapide à tester :
https://www.cjoint.com/c/ECimbs3Z2kz
Le problème venait d'excel 2010/2013 qui rame pour supprimer les lignes alors que sur 2007 il n'y a pas le problème.
Une version qui devrait être plus rapide à tester :
https://www.cjoint.com/c/ECimbs3Z2kz
Bonjour,
Le transfert a fonctionné en moins d'une seconde, donc parfait, merci pour l'aide.
Seul problème, toute les formules de l'onglet "Data" ont été copier coller en valeur, est-ce possible de corriger ?
J'ai regardé pour modifier, mais je vois pas trop comment... maybe ligne 37 de la macro ?!
Julien
Le transfert a fonctionné en moins d'une seconde, donc parfait, merci pour l'aide.
Seul problème, toute les formules de l'onglet "Data" ont été copier coller en valeur, est-ce possible de corriger ?
J'ai regardé pour modifier, mais je vois pas trop comment... maybe ligne 37 de la macro ?!
Julien
Bonsoir,
Effectivement, je l'avais fait en valeur et je ne voyait pas pour les formats mais cela devrait aller correctement maintenant :
https://www.cjoint.com/c/ECixrHaiKzf
Peux-tu me confirmer ta version excel ?
Effectivement, je l'avais fait en valeur et je ne voyait pas pour les formats mais cela devrait aller correctement maintenant :
https://www.cjoint.com/c/ECixrHaiKzf
Peux-tu me confirmer ta version excel ?