Macro Autofilter

Résolu
kimiros Messages postés 10 Statut Membre -  
kimiros Messages postés 10 Statut Membre -
Bonjour,

J'ai en ma possession une macro me permettant de filtrer mes choix d'une première feuille et de les reporter dans une autre. Cependant, depuis la modification du nom et du nombre de feuille, elle ne veut plus rien entendre. Pouvez-vous me dire si quelque chose vous choque dans cette macro ?


Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Application.ScreenUpdating = False
Machine = ActiveSheet.Name
If Machine = "UT 1 Bureau Technique" Or Machine = "UT 2 Cuisine" Or Machine = "UT 3 Cantine" Or Machine = "UT 4 Salle de jeu - Sommeil" Or Machine = "UT 5 Salle d'accueil" Or Machine = "UT 6 Salle de chnage - d'eau" Or Machine = "UT 7 Laverie" Or Machine = "UT 8 Parc" Then
Set W = Sheets("RELEVE DES RISQUES").Range("a1:F1")
W.AutoFilter
W.AutoFilter Field:=8, Criteria1:=Machine
Sheets("RELEVE DES RISQUES").Range("a1:s" & derlig).Copy Destination:=Sheets(Machine).Range("a1")
derlig = Sheets("RELEVE DES RISQUES").Range("f65536").End(xlUp).Row
Sheets(Machine).Range("a1:s1000").ClearContents
W.AutoFilter
Call test
Call touteut
End If
Application.ScreenUpdating = True
End Sub

Sub test()
Dim derlig As Integer
Dim plage As Range
Machine = ActiveSheet.Name
With Sheets(Machine)
derlig = .Range("A" & Rows.Count).End(xlUp).Row
Set plage = .Range("A2:s" & derlig)
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range("B1:B" & derlig), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
With .Sort
.SetRange plage
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub


Sub touteut()
Dim ong As Worksheet 'déclare la variable ong (ONGlet)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim dest As Range 'déclare la variable dest (DESTination)
Dim plage As Range
Machine = ActiveSheet.Name
With Sheets("RELEVE DES RISQUES")
derlig = Sheets("RELEVE DES RISQUES").Range("F65536").End(xlUp).Row
Set plage = Sheets("RELEVE DES RISQUES").Range(.Cells(2, 8), .Cells(derlig, 8))

For Each cel In plage
If cel.Text = "Toutes les UT" Then 'condition 2 : si la cellule n'est pas vide
Set dest = Sheets(Machine).Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest (destination de la copie)
Range(cel.Offset(0, -7), cel.Offset(0, 14)).Copy dest 'copie la ligne et la colle dans dest
End If 'fin de la condition 2
Next cel 'prochaine cellule cel de la boucle 2
End With
End Sub


Merci d'avance,

Cordialement

A voir également:

2 réponses

f894009 Messages postés 17413 Statut Membre 1 715
 
Bonjour,

Question:
avez-vous modifie le code pour prendre en compte les nouveaux noms de feuille et les feuilles supplémentaires, ca peut paraitre neuneu mais ...
0
kimiros Messages postés 10 Statut Membre
 
Oui, les noms associés au paramètre "Machine" sont les feuilles concernées par cette macro.

Cordialement
0
f894009 Messages postés 17413 Statut Membre 1 715 > kimiros Messages postés 10 Statut Membre
 
Bonjour,

Une chose sure, le code fonctionne, puisque au changement de feuille ayant mis un point d'arret ca s'arrete, mais n'ayant pas vos donnees, peux pas savoir ce qui ne "fonctionne" pas
0
kimiros Messages postés 10 Statut Membre
 
Bonjour,

Je vous met ci-joint mon fichier avec deux exemples de données dans la feuille "relevé des risques". Le but est que quand on choisit une unité de travail dans la feuille "relevé des risques", la ligne correspondante soit reportée dans l'onglet concernant l'unité de travail.

https://www.cjoint.com/c/EKyj7ZYekYr
0
f894009 Messages postés 17413 Statut Membre 1 715 > kimiros Messages postés 10 Statut Membre
 
Bonjour,

Je regarde la chose

A+
0
f894009 Messages postés 17413 Statut Membre 1 715
 
Re,

Fichier modifie : https://www.cjoint.com/c/EKylCxOjnYf

Ai du mal a comprendre votre logique, mais ca copie
0
kimiros Messages postés 10 Statut Membre
 
Nickel merci, la copie dans les onglets va permettre de trier et de traiter localement des problèmes.

Merci encore pour votre aide.
0