Filtrer, trier, copier, coller, annuler la sélection
Fermé
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
-
14 juin 2017 à 20:55
JenSou798312 Messages postés 57 Date d'inscription mardi 30 mai 2017 Statut Membre Dernière intervention 3 mars 2018 - 20 juin 2017 à 10:02
JenSou798312 Messages postés 57 Date d'inscription mardi 30 mai 2017 Statut Membre Dernière intervention 3 mars 2018 - 20 juin 2017 à 10:02
A voir également:
- Filtrer, trier, copier, coller, annuler la sélection
- Copier coller pdf - Guide
- Excel trier par ordre croissant chiffre - Guide
- Copier-coller - Accueil - Windows
- Historique copier-coller android - Guide
- Symbole clavier copier coller - Guide
3 réponses
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
Ambassadeur
1 554
14 juin 2017 à 21:22
14 juin 2017 à 21:22
bonjour, pour commencer, je propose de simplifier ainsi:
Sub TriDLV() call dlv("1") call dlv("2") call dlv("3") call dlv("4") call dlv("5") call dlv("6") call dlv("7") call dlv("8") call dlv("9") call dlv("10") call dlv("11") call dlv("12") call dlv("PAROIS_DEFORMABLES") end sub Sub dlv(nom As String) Dim wsdlv As Worksheet ActiveSheet.Range("$A$1:$CI$385").AutoFilter Field:=7, Criteria1:=nom ActiveWorkbook.Worksheets("PROGRAMME").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("PROGRAMME").AutoFilter.Sort.SortFields.Add Key:= _ Range("B1:B385"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With ActiveWorkbook.Worksheets("PROGRAMME").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A1:CF383").Select Selection.Copy Set wsdlv = Sheets.Add(After:=Sheets(Sheets.Count)) wsdlv.Name = "DLV" + nom Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
Ambassadeur
1 554
Modifié le 16 juin 2017 à 16:39
Modifié le 16 juin 2017 à 16:39
si j'ai bien deviné, suggestion:
tu peux supprimer majtridlv, et changer ceci:
Sub dlv(nom As String, col As Integer) Dim wsdlv As Worksheet Dim wsprog As Worksheet Dim ws As Worksheet Dim creation As Boolean creation = True For Each ws In Sheets If ws.Name = "DLV" + nom Then Set wsdlv = ws wsdlv.Cells.Clear creation = False Exit For End If Next ws If creation Then Set wsdlv = Sheets.Add(After:=Sheets(Sheets.Count)) wsdlv.Name = "DLV" + nom End If Set wsprog = ActiveWorkbook.Worksheets("PROGRAMME") wsprog.Range("$A$1:$CI$385").AutoFilter Field:=col, Criteria1:=nom wsprog.AutoFilter.Sort.SortFields.Clear wsprog.AutoFilter.Sort.SortFields.Add Key:= _ wsprog.Range("B1:B385"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With wsprog.AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With wsprog.Range("A1:CF383").Copy wsdlv.Range("A1") Application.CutCopyMode = False wsprog.Range("$A$1:$CI$385").AutoFilter Field:=col End Sub
tu peux supprimer majtridlv, et changer ceci:
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("$A$1:$CI$385")) Is Nothing Then Call TriDLV() End If End Sub
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
16 juin 2017 à 17:40
16 juin 2017 à 17:40
la mise à jour fonctionne,
la création des feuilles fonctionne sauf pour parois déformables
la création des feuilles fonctionne sauf pour parois déformables
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
Modifié le 16 juin 2017 à 22:21
Modifié le 16 juin 2017 à 22:21
je pense comprendre le soucis.
suggestion:
suggestion:
Sub dlv(nomfeuille As String, col As Integer, critere As String) Dim wsdlv As Worksheet Dim wsprog As Worksheet Dim ws As Worksheet Dim creation As Boolean creation = True For Each ws In Sheets If ws.Name = nomfeuille Then Set wsdlv = ws wsdlv.Cells.Clear creation = False Exit For End If Next ws If creation Then Set wsdlv = Sheets.Add(After:=Sheets(Sheets.Count)) wsdlv.Name = nomfeuille End If Set wsprog = ActiveWorkbook.Worksheets("PROGRAMME") wsprog.Range("$A$1:$CI$385").AutoFilter Field:=col, Criteria1:=critere wsprog.AutoFilter.Sort.SortFields.Clear wsprog.AutoFilter.Sort.SortFields.Add Key:= _ wsprog.Range("B1:B385"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With wsprog.AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With wsprog.Range("A1:CF383").Copy wsdlv.Range("A1") Application.CutCopyMode = False wsprog.Range("$A$1:$CI$385").AutoFilter Field:=col End Sub Sub TriDLV() Const sdlv As String = "DLV" Call dlv(sdlv & "1", 7, "1") Call dlv(sdlv & "2", 7, "2") Call dlv(sdlv & "3", 7, "3") Call dlv(sdlv & "4", 7, "4") Call dlv(sdlv & "5", 7, "5") Call dlv(sdlv & "6", 7, "6") Call dlv(sdlv & "7", 7, "7") Call dlv(sdlv & "8", 7, "8") Call dlv(sdlv & "9", 7, "9") Call dlv(sdlv & "10", 7, "10") Call dlv(sdlv & "11", 7, "11") Call dlv(sdlv & "12", 7, "12") Call dlv("PAROIS_DEFORMABLES", 28, "PAROIS_DEFORMABLES") End Sub
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
>
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
17 juin 2017 à 13:13
17 juin 2017 à 13:13
Tout fonctionne nickel
dernière question, si je veux ajouter une ligne en fin de tableau (en fin d'année, je peux avoir des lignes en plus), j'ai vérifié, ça ne prends pas les motif à ce niveau là.
Est ce qu'il ne faudrait pas définir la plage de sélection avec Lbound et Ubound?
dernière question, si je veux ajouter une ligne en fin de tableau (en fin d'année, je peux avoir des lignes en plus), j'ai vérifié, ça ne prends pas les motif à ce niveau là.
Est ce qu'il ne faudrait pas définir la plage de sélection avec Lbound et Ubound?
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
>
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
17 juin 2017 à 13:27
17 juin 2017 à 13:27
peut-être ainsi?
Sub dlv(nomfeuille As String, col As Integer, critere As String) Dim wsdlv As Worksheet Dim wsprog As Worksheet Dim ws As Worksheet Dim creation As Boolean creation = True For Each ws In Sheets If ws.Name = nomfeuille Then Set wsdlv = ws wsdlv.Cells.Clear creation = False Exit For End If Next ws If creation Then Set wsdlv = Sheets.Add(After:=Sheets(Sheets.Count)) wsdlv.Name = nomfeuille End If Set wsprog = ActiveWorkbook.Worksheets("PROGRAMME") wsprog.Range("$A:$CI").AutoFilter Field:=col, Criteria1:=critere wsprog.AutoFilter.Sort.SortFields.Clear wsprog.AutoFilter.Sort.SortFields.Add Key:= _ wsprog.Range("B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With wsprog.AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With wsprog.Range("A:CF").Copy wsdlv.Range("A1") Application.CutCopyMode = False wsprog.Range("$A:$CI").AutoFilter Field:=col End Sub
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
>
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
17 juin 2017 à 13:50
17 juin 2017 à 13:50
je pensais plutôt rajouter dans les variables (BDD As Variant)
et
Dim n As Long
Dim RefPos As Long
For n = Lbound(BDD) To Ubound(BDD)
RefPos = n
etc...
et
Dim n As Long
Dim RefPos As Long
For n = Lbound(BDD) To Ubound(BDD)
RefPos = n
etc...
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
Ambassadeur
1 554
14 juin 2017 à 21:41
14 juin 2017 à 21:41
Je pense que ton analyse n'est pas correcte: ton soucis vient du fait que tu utilises ActiveSheet sans bien contrôler sa valeur.
je propose donc:
je propose donc:
Sub dlv(nom As String) Dim wsdlv As Worksheet Dim wsprog As Worksheet Set wsprog = ActiveWorkbook.Worksheets("PROGRAMME") wsprog.Range("$A$1:$CI$385").AutoFilter Field:=7, Criteria1:=nom wsprog.AutoFilter.Sort.SortFields.Clear wsprog.AutoFilter.Sort.SortFields.Add Key:= _ wsprog.Range("B1:B385"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With wsprog.AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Set wsdlv = Sheets.Add(After:=Sheets(Sheets.Count)) wsdlv.Name = "DLV" + nom wsprog.Range("A1:CF383").Copy wsdlv.Range("A1") Application.CutCopyMode = False End Sub
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
15 juin 2017 à 08:51
15 juin 2017 à 08:51
Ce code me crée qu'une feuille DLV après PROGRAMME et m'efface le contenu de la colonne 7.
En fait il a pris que les cellules vides, ma selection de filtre est toujours présente dans PROGRAMME après l'exécution de ta macro
En fait il a pris que les cellules vides, ma selection de filtre est toujours présente dans PROGRAMME après l'exécution de ta macro
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
>
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
15 juin 2017 à 08:58
15 juin 2017 à 08:58
Au temps pour moi ça fonctionne impec!!!
Merci beaucoup
Merci beaucoup
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
>
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
Modifié le 15 juin 2017 à 09:18
Modifié le 15 juin 2017 à 09:18
Petite question,
Pour la dernière condition de tri (Parois Deformable), mon filtre n'est pas sur la colonne 7 mais 28.
J'ai essayé d'adapter ton code pour qu'il aille chercher la bonne info pour la dernière condition, et ça ne fonctionne pas :-/
Est ce que je peux abuser de ton aide encore une fois?
J'ai modifié Call dlv("PAROIS_DEFORMABLES") par Call ParoisDeformables()
et j'ai rajouté une Sub ParoisDeformables() avec ton code modifié…
Pour la dernière condition de tri (Parois Deformable), mon filtre n'est pas sur la colonne 7 mais 28.
J'ai essayé d'adapter ton code pour qu'il aille chercher la bonne info pour la dernière condition, et ça ne fonctionne pas :-/
Est ce que je peux abuser de ton aide encore une fois?
J'ai modifié Call dlv("PAROIS_DEFORMABLES") par Call ParoisDeformables()
et j'ai rajouté une Sub ParoisDeformables() avec ton code modifié…
Sub ParoisDeformables() Dim wsdlv As Worksheet Dim wsprog As Worksheet Set wsprog = ActiveWorkbook.Worksheets("PROGRAMME") wsprog.Range("$A$1:$CI$385").AutoFilter Field:=28, Criteria1:="PAROIS DEFORMABLES" wsprog.AutoFilter.Sort.SortFields.Clear wsprog.AutoFilter.Sort.SortFields.Add Key:= _ wsprog.Range("B1:B385"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With wsprog.AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Set wsdlv = Sheets.Add(After:=Sheets(Sheets.Count)) wsdlv.Name = "PAROIS_DEFORMABLES" wsprog.Range("A1:CF383").Copy wsdlv.Range("A1") Application.CutCopyMode = False End Sub
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
15 juin 2017 à 14:30
15 juin 2017 à 14:30
je suggère plutôt:
et
Sub dlv(nom As String, col As Integer) Dim wsdlv As Worksheet Dim wsprog As Worksheet Set wsprog = ActiveWorkbook.Worksheets("PROGRAMME") wsprog.Range("$A$1:$CI$385").AutoFilter Field:=col, Criteria1:=nom wsprog.AutoFilter.Sort.SortFields.Clear wsprog.AutoFilter.Sort.SortFields.Add Key:= _ wsprog.Range("B1:B385"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With wsprog.AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Set wsdlv = Sheets.Add(After:=Sheets(Sheets.Count)) wsdlv.Name = "DLV" + nom wsprog.Range("A1:CF383").Copy wsdlv.Range("A1") Application.CutCopyMode = False End Sub
et
Sub TriDLV() call dlv("1",7) call dlv("2",7) call dlv("3",7) call dlv("4",7) call dlv("5",7) call dlv("6",7) call dlv("7",7) call dlv("8",7) call dlv("9",7) call dlv("10",7) call dlv("11",7) call dlv("12",7) call dlv("PAROIS_DEFORMABLES",28) end sub
JenSou798312
Messages postés
57
Date d'inscription
mardi 30 mai 2017
Statut
Membre
Dernière intervention
3 mars 2018
>
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
15 juin 2017 à 17:02
15 juin 2017 à 17:02
re,
les données parois réformables ne s'incrementent pas dans la nouvelle feuille
les données parois réformables ne s'incrementent pas dans la nouvelle feuille