Copier Vba Excel
Résolu/Fermé
lanetmel
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
-
3 mars 2013 à 04:09
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 6 mars 2013 à 19:23
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 6 mars 2013 à 19:23
A voir également:
- Copier Vba Excel
- Liste déroulante excel - Guide
- Copier une vidéo youtube - Guide
- Formule excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
5 réponses
lanetmel
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
5 mars 2013 à 13:36
5 mars 2013 à 13:36
Bonjour
personne a une idée?
merci à l'avance
Mélanie
personne a une idée?
merci à l'avance
Mélanie
scinarf
Messages postés
1098
Date d'inscription
samedi 18 novembre 2006
Statut
Membre
Dernière intervention
25 septembre 2014
252
5 mars 2013 à 13:41
5 mars 2013 à 13:41
Bonjour,
Alors on va un peu optimiser tout ça, cela dis c'est pas mal du tout, enfin de mon point de vue.
Pour commencer on va utiliser un :
application.screenupdating=false 'juste après le sub copyall()
cela permet de masquer l'ensemble des changements effectués donc de ne pas les afficher = gain de temps.
Et a la fin on va utiliser un
application.screenupdating=true 'on peut réafficher le tout a la fin
Alors on va un peu optimiser tout ça, cela dis c'est pas mal du tout, enfin de mon point de vue.
Pour commencer on va utiliser un :
application.screenupdating=false 'juste après le sub copyall()
cela permet de masquer l'ensemble des changements effectués donc de ne pas les afficher = gain de temps.
Et a la fin on va utiliser un
application.screenupdating=true 'on peut réafficher le tout a la fin
scinarf
Messages postés
1098
Date d'inscription
samedi 18 novembre 2006
Statut
Membre
Dernière intervention
25 septembre 2014
252
Modifié par scinarf le 5/03/2013 à 13:44
Modifié par scinarf le 5/03/2013 à 13:44
J'ai remarqué aussi que ce qui fais perdre du temps c'est la boucle fort qui va jusqu'à 5000.
Pour corriger cela, on peut affecter une colonne qui détecte si oui ou non la ligne a déjà était reportée quelque part.
Je suis en train de rédiger un nouveau code pour optimiser le tout
Petite question : Lorsque aucun client est marqué comment faites vous ? exemple, la ligne 30 de votre fichier
Pour corriger cela, on peut affecter une colonne qui détecte si oui ou non la ligne a déjà était reportée quelque part.
Je suis en train de rédiger un nouveau code pour optimiser le tout
Petite question : Lorsque aucun client est marqué comment faites vous ? exemple, la ligne 30 de votre fichier
lanetmel
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
5 mars 2013 à 14:00
5 mars 2013 à 14:00
Bonjour scinarf
la ligne 30 vient du fait que j'ai insérer une ligne au milieu au lieu d'écrire à la suite.. la formule pour que le nom du client s'inscrive est déjà dans la colonne L ex : =GAUCHE(D23;3) ..alors si j'entre mes choses à la suite au lieu d'insérer des lignes, il n'y aura pas de problème
merci beaucoup de prendre le temps de m'aider
Mélanie
la ligne 30 vient du fait que j'ai insérer une ligne au milieu au lieu d'écrire à la suite.. la formule pour que le nom du client s'inscrive est déjà dans la colonne L ex : =GAUCHE(D23;3) ..alors si j'entre mes choses à la suite au lieu d'insérer des lignes, il n'y aura pas de problème
merci beaucoup de prendre le temps de m'aider
Mélanie
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
5 mars 2013 à 14:15
5 mars 2013 à 14:15
Bonjour,
Pour aller vite compte tenu du nombre de lignes, il vaut mieux peut-^tre mémoriser en RAM la feuille all et restituer.
des trucs que je ne comprend pas:
For rall = 3 To 5000 ' pour Range dans la feuilleall de 3 à 5000
If sall.Cells(rall, 12).Text = "AMX" Then ' Si dans la feuilleall dans les cellules à partir de la ligne 2
o, part de la ligne 3 ?
Rclient est incrémenté de 1 à chaque boucle,: si j'ai AMX puis 3 autre clients avant un autre Amx, on va avoir un décalage de 3 lignes dans la feuille AMX ?
Pour aller vite compte tenu du nombre de lignes, il vaut mieux peut-^tre mémoriser en RAM la feuille all et restituer.
des trucs que je ne comprend pas:
For rall = 3 To 5000 ' pour Range dans la feuilleall de 3 à 5000
If sall.Cells(rall, 12).Text = "AMX" Then ' Si dans la feuilleall dans les cellules à partir de la ligne 2
o, part de la ligne 3 ?
Rclient est incrémenté de 1 à chaque boucle,: si j'ai AMX puis 3 autre clients avant un autre Amx, on va avoir un décalage de 3 lignes dans la feuille AMX ?
lanetmel
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
5 mars 2013 à 14:32
5 mars 2013 à 14:32
Bonjour Michel
oui j'ai un décalage dans mes lignes,.. ce que je voulais faire c'est tout simplement que les lignes se mettent une à la suite de l'autre.. je suis loin d'être experte et de tout comprendre alors je comprennais pas pourquoi mes lignes se décalaient.. J'avais essayer de jouer avec ma ligne rclient = rclient + 1 mais ça n'avait pas marché..
merci
Mélanie
oui j'ai un décalage dans mes lignes,.. ce que je voulais faire c'est tout simplement que les lignes se mettent une à la suite de l'autre.. je suis loin d'être experte et de tout comprendre alors je comprennais pas pourquoi mes lignes se décalaient.. J'avais essayer de jouer avec ma ligne rclient = rclient + 1 mais ça n'avait pas marché..
merci
Mélanie
lanetmel
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
5 mars 2013 à 14:35
5 mars 2013 à 14:35
Et aussi tu as raison pour la ligne 2 de la feuille all.. ça aurait dû être 3
merci
merci
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
Modifié par michel_m le 5/03/2013 à 15:36
Modifié par michel_m le 5/03/2013 à 15:36
Re,
Bonjour Scinarf, Excuses moi de ne pas t'avoir salué tout à l'heure
lanetmel
Je dois m'absenter 1 heure ou 2
Ci dessous une proposition partielle qui ne reporte que les clients (amx, app...)
j'attaque les scédulé, latté... à mon retour
si tu peux, fais un essai et tu dis...
Michel
Bonjour Scinarf, Excuses moi de ne pas t'avoir salué tout à l'heure
lanetmel
Je dois m'absenter 1 heure ou 2
Ci dessous une proposition partielle qui ne reporte que les clients (amx, app...)
j'attaque les scédulé, latté... à mon retour
si tu peux, fais un essai et tu dis...
Option Explicit Option Base 1 Sub repartir_all() Dim Client As String, cpt_cl As Byte, Nbre As Integer, Cptr As Integer Dim Tablo(), Lig As Integer, Col As Byte Application.ScreenUpdating = False With Sheets("all") For cpt_cl = 1 To 8 Client = Choose(cpt_cl, "AMX", "app", "CYM", "GVL", "NOR", "WIC", "JVL", "ALI") Nbre = Application.CountIf(.Columns("L"), Client) ReDim Tablo(Nbre, 10) If Nbre > 0 Then Lig = 2 For Cptr = 1 To Nbre Lig = .Columns("L").Find(Client, .Cells(Lig, "L"), xlValues).Row For Col = 1 To 10 Tablo(Cptr, Col) = .Cells(Lig, Col) Next Next With Sheets(Client) Ligvide = Columns("A").Find("", Range("A1")).Row With .Cells(Ligvide, "A").Resize(Nbre, 10) .Value = Tablo .Borders.Weight = xlThin End With End With End If Next '-------- EN ATTENTE End With End Sub
Michel
lanetmel
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
5 mars 2013 à 19:08
5 mars 2013 à 19:08
Bonjour Michel
Je te remercie beaucoup pour ton aide.. J'ai essayé ton code mais il ne fonctionne pas..
premièrement, j'ai ajouté ça
Dim ligvide As Integer
Ensuite j'arrêtais à
ReDim Tablo(Nbre, 10)..
ça je comprends pas tellement cette ligne là alors je sais pas ce qui va pas..
merci
Mélanie
Je te remercie beaucoup pour ton aide.. J'ai essayé ton code mais il ne fonctionne pas..
premièrement, j'ai ajouté ça
Dim ligvide As Integer
Ensuite j'arrêtais à
ReDim Tablo(Nbre, 10)..
ça je comprends pas tellement cette ligne là alors je sais pas ce qui va pas..
merci
Mélanie
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
5 mars 2013 à 19:20
5 mars 2013 à 19:20
Re,
code testé et OK durée env 0,2 secondes
Je t'envoie le classeur demain matin
code testé et OK durée env 0,2 secondes
Je t'envoie le classeur demain matin
Option Explicit Option Base 1 Dim T_all() As Variant, Lig As Integer, Col As Byte Sub repartir_all() Dim Client As String, cpt_cl As Byte, Nbre As Integer, Cptr As Integer Dim Derlig As Integer Dim Tablo() Dim T_deja(), T_noced(), T_cedul() Dim Cpt_deja As Integer, Cpt_noced As Integer, cpt_cedul As Integer Dim start As Single start = Timer Application.ScreenUpdating = False With Sheets("all") 'mémorise la feuille "All" en mémoire RAM Derlig = .Range("B" & .Rows.Count).End(xlUp).Row T_all = .Range("A1:K" & Derlig).Value '--------------- Répartition dans les feuilles Clients For cpt_cl = 1 To 8 Client = Choose(cpt_cl, "AMX", "app", "CYM", "GVL", "NOR", "WIC", "JVL", "ALI") Nbre = Application.CountIf(.Columns("L"), Client) 'collecte des données dans la ligne en cours et mémorisation dans la variable Tablo If Nbre > 0 Then ReDim Tablo(Nbre, 10) Lig = 2 For Cptr = 1 To Nbre Lig = .Columns("L").Find(Client, .Cells(Lig, "L"), xlValues).Row For Col = 1 To 10 Tablo(Cptr, Col) = T_all(Lig, Col) Next Next 'restitution et encadrement dans la feuille clients en cours With Sheets(Client) .Range("A2:J5000").Clear With .Cells(2, "A").Resize(Nbre, 10) .Value = Tablo .Borders.Weight = xlThin End With End With End If Next '--------Collecte données suivant les valeurs ou non valeurs dans colonnes JK ReDim T_deja(11, 1) ReDim T_noced(9, 1) ReDim T_cedul(9, 1) For Lig = 3 To UBound(T_all) 'mémorise données vers feuille "déjà latté" If T_all(Lig, 10) >= "" And T_all(Lig, 11) >= "" Then Cpt_deja = Cpt_deja + 1 ReDim Preserve T_deja(11, Cpt_deja) For Col = 1 To 11 T_deja(Col, Cpt_deja) = T_all(Lig, Col) Next End If 'mémorise vers à latter non cédulé If T_all(Lig, 10) = "" And T_all(Lig, 11) = "" Then Cpt_noced = Cpt_noced + 1 ReDim Preserve T_noced(9, Cpt_noced) For Col = 1 To 9 T_noced(Col, Cpt_noced) = T_all(Lig, Col) Next End If 'mémorise vers cédulé If T_all(Lig, 10) = "" Then cpt_cedul = cpt_cedul + 1 ReDim Preserve T_cedul(9, cpt_cedul) For Col = 1 To 9 T_cedul(Col, cpt_cedul) = T_all(Lig, Col) Next End If Next '-----------------restitutions et encadrements dans _ les feuilles deja latte, non cesdule, cedulé Restituer "Déjà latté", Cpt_deja, T_deja, 11 Restituer "à latter non cédulé", Cpt_noced, T_noced, 9 Restituer "cédulé", cpt_cedul, T_cedul, 9 End With Sheets("All").Select Application.ScreenUpdating = True MsgBox " Répartition effectuée en " & Timer - start & " .sec" End Sub Sub Restituer(onglet, Cptr, Tablo, ColX) With Sheets(onglet) .Range("A3:K5000").Clear With .Cells(3, "A").Resize(Cptr, ColX) .Value = Application.Transpose(Tablo) .Borders.Weight = xlThin End With End With End Sub
lanetmel
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
6 mars 2013 à 19:23
6 mars 2013 à 19:23
Michel
Je peux pas mettre une note à ta réponse car tu as écrit la réponse dans les commentaires,,
Je peux pas mettre une note à ta réponse car tu as écrit la réponse dans les commentaires,,
lanetmel
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
5 mars 2013 à 19:42
5 mars 2013 à 19:42
Bonjour Michel
un mot : Wow.. c'est ultra rapide! Je vais regarder comme il faut si tout se passe comme prévu mais à première vue tout semble parfait!
Je vérifie le tout et te reviens pour mettre résolu si tout est ok
merci aussi à Scinarf pour ton aide
Je vous reviens
Mélanie
un mot : Wow.. c'est ultra rapide! Je vais regarder comme il faut si tout se passe comme prévu mais à première vue tout semble parfait!
Je vérifie le tout et te reviens pour mettre résolu si tout est ok
merci aussi à Scinarf pour ton aide
Je vous reviens
Mélanie
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
6 mars 2013 à 07:41
6 mars 2013 à 07:41
Bonjour
Ci joint le classeur avec des vérifs sur les conditions dans les col J & K
https://www.cjoint.com/?3CghOjkbvRb
remarques:
1/ les feuilles de destinations sont vidées chaque fois que tu appuies sur le bouton "transférer"
peut-^tre dois tu au contraire cumuler à une nouvelle feuille "all" ? tu dis...
2/ il n'est pas nécessaire de trier la feuille "all" pour regrouper par client. Si ce tri est effectué avant toute intervention sur la feuille "all", on pourrait alors gagner un peu de temps...si ça t'intéresse, tu dis aussi
3/ Pour mes stats, merci de me dire la durée sur le classeur réel ( 1089 lignes ?)
Ci joint le classeur avec des vérifs sur les conditions dans les col J & K
https://www.cjoint.com/?3CghOjkbvRb
remarques:
1/ les feuilles de destinations sont vidées chaque fois que tu appuies sur le bouton "transférer"
peut-^tre dois tu au contraire cumuler à une nouvelle feuille "all" ? tu dis...
2/ il n'est pas nécessaire de trier la feuille "all" pour regrouper par client. Si ce tri est effectué avant toute intervention sur la feuille "all", on pourrait alors gagner un peu de temps...si ça t'intéresse, tu dis aussi
3/ Pour mes stats, merci de me dire la durée sur le classeur réel ( 1089 lignes ?)
scinarf
Messages postés
1098
Date d'inscription
samedi 18 novembre 2006
Statut
Membre
Dernière intervention
25 septembre 2014
252
6 mars 2013 à 08:04
6 mars 2013 à 08:04
Pas de soucis et content que une personne suive d'aussi pret son poste ;)
Bonne journée
Bonne journée
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lanetmel
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
6 mars 2013 à 19:21
6 mars 2013 à 19:21
Bonjour Michel
C'est parfait! J'avoue que jamais j'aurais été capable de faire un code comme ça.
1- non c'est parafit que les feuilles se vident et se remplissent
2- c'est déjà ultra performant et souvent je trie ma feuille quand même juste pour voir les infos..alors ce n'est pas nécessaire
3- je n'ai que 120 lignes présentement et tout ce fait en 0.06 sec
un énorme merci!
il se peut que je vous reviennent bientôt je vais essayer de travailler pour automatiser mon horaire un peu
c'est génial des gens comme vous
Mélanie
C'est parfait! J'avoue que jamais j'aurais été capable de faire un code comme ça.
1- non c'est parafit que les feuilles se vident et se remplissent
2- c'est déjà ultra performant et souvent je trie ma feuille quand même juste pour voir les infos..alors ce n'est pas nécessaire
3- je n'ai que 120 lignes présentement et tout ce fait en 0.06 sec
un énorme merci!
il se peut que je vous reviennent bientôt je vais essayer de travailler pour automatiser mon horaire un peu
c'est génial des gens comme vous
Mélanie