code qui sert pour plusieurs feuilles

jacky49

XLDnaute Impliqué
Bonsoir le forum,

j'ai ce code qui me sert pour plusieurs feuilles
Code:
Public Sub SERIESAVE(ByVal sht As Object, ByVal DebZone As Integer, ByVal ColDebBD As Integer)
Dim LastLig As Integer, DossParPoule As Integer, NbrPoules As Integer
Dim i As Integer, j As Integer, k As Integer, Deb As Integer
Dim c As Range

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

If sht.Range("P65536").End(xlUp).Row > 8 Then
    MsgBox "Finale déjà enregistrée, impossible de modifier le résultat de la série"
    Exit Sub
End If
CATEGORIE sht, ColDebBD

With sht

    .Unprotect Password:="Roller"
    .Columns("K:K").Hidden = False
    LastLig = .Range("I65535").End(xlUp).Row
    .Range("K9:L" & LastLig).ClearContents
    
    LastLig = .Range("B65535").End(xlUp).Row
    NbrPoules = Int(Cells(DebZone - 1, 256).End(xlToLeft).Column / 3)
    Deb = 0
    
    For j = 1 To NbrPoules
        k = 0
        DossParPoule = Cells(DebZone, 3 * j - 1).End(xlDown).Row
        For i = DebZone To DossParPoule
            Set c = .Range("B8:B" & LastLig).Find(Cells(i, 3 * j - 1), , xlValues, xlWhole)
            If Not c Is Nothing Then
                If IsNumeric(Cells(i, 3 * j).Value) Then
                    c.Offset(0, 9).Value = Cells(i, 3 * j).Value ' + Deb
                Else
                    k = k + 1
                    c.Offset(0, 10).Value = "DNF"
                End If
            End If
            Set c = Nothing
        Next i
        
        'Deb = Deb + DossParPoule - DebZone + 1 - k
        .Range("B9:L" & LastLig).Sort Key1:=sht.Range("K9"), _
            Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
            Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    Next j
    
    .Activate
    .Protect Password:="Roller"
End With
Call ClasserparTempsAgilité
End Sub
puis j'ai refais une macro (ClasserparTempsAgilité)qui fonctionne mais qui elle ne fonctionne que pour la feuille active, j'aimerais qu'il puisse servir comme l'autre pour toutes les feuilles.
voici le code de ma 2ème macro
Code:
Sub ClasserparTempsAgilité()
'
' ClasserparTempsAgilité Macro
'

'
    Range("B8:K14").Select
    ActiveWorkbook.Worksheets("SMG").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("SMG").Sort.SortFields.Add Key:=Range("K9:K14"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("SMG").Sort.SortFields.Add Key:=Range("H9:H14"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("SMG").Sort
        .SetRange Range("B8:K14")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("T8").Select
End Sub
merci d'avance pour ceux qui veulent bien m'aider
et bonne fête de fin d'année
jacky
 

Softmama

XLDnaute Accro
Re : code qui sert pour plusieurs feuilles

Bonjour jacky49

Hélas, je ne vais guère pouvoir t'aider : .Sort.SortFields.Clear semble être un langage propre à Excel 2007, dont je ne suis pas familier. Si tu bosses sur Excel2007 ou plus récent, cette instruction devrait fonctionner à priori.
 

Papou-net

XLDnaute Barbatruc
Re : code qui sert pour plusieurs feuilles

Bonjour jacky49, Softmama, le Forum,

Jacky, ta 1ère macro reçoit un nom de feuille en paramètre :

Code:
Public Sub SERIESAVE([B]ByVal sht As Object[/B], ByVal DebZone As Integer, ByVal ColDebBD As Integer)

Le mieux, est de faire la même chose pour ta 2ème macro :

Code:
Sub ClasserparTempsAgilité()
'
' ClasserparTempsAgilité Macro
'
With sheets(sh)
    .Range("B8:K14").Select ' Je ne pense pas que cette ligne soit nécessaire
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=.Range("K9:K14"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .Sort.SortFields.Add Key:=.Range("H9:H14"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .Sort
    .SetRange Range("B8:K14")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    .Range("T8").Select
End WithEnd
Sub

Dans l"appel de ta macro, il faut spécifier le nom de la feuille pour laquelle tu la destines, ex :

Code:
Sub MacroAppel()
    ClasserparTempsAgilité Macro "Feuil1"

Bien sûr, tu remplaces "Feuil1" par le nom de la feuille, entre guillemets.

N'ayant pu tester ta macro, j'espère que ça te conviendra.

Cordialement.
 

jacky49

XLDnaute Impliqué
Re : code qui sert pour plusieurs feuilles

Bonsoir le Forum, Papou Net,

tu dis :

Dans l"appel de ta macro, il faut spécifier le nom de la feuille pour laquelle tu la destines, ex :

Code :Sub MacroAppel()
ClasserparTempsAgilité Macro "Feuil1"
Bien sûr, tu remplaces "Feuil1" par le nom de la feuille, entre guillemets.

le probleme , c'est que ce code , il faut qu'il serve aussi pour plusieurs feuilles donc quoi faire;
merci
jacky
 

Papou-net

XLDnaute Barbatruc
Re : code qui sert pour plusieurs feuilles

le probleme , c'est que ce code , il faut qu'il serve aussi pour plusieurs feuilles donc quoi faire;
merci
jacky

Bonsoir Jacky,

Cette macro sert bien à plusieurs feuilles. Ce qu'il faut savoir, c'est comment tu fais appel à cette macro, depuis quelle(s) procédure(s) ?

L'idéal serait que tu joignes un exemple de ton fichier, sans données confidentielles bien sûr !

A te lire.

Cordialement.
 

jacky49

XLDnaute Impliqué
Re : code qui sert pour plusieurs feuilles

bonsoir Papou-net,

le problème c'est que mon fichier fait 1.19 mo, donc si je le joins, il fera 194 KO mini en supprimant des feuilles et en le compressant
je peux peut-être te l'envoyer sur une adresse mail même si je sais que cela ne se fait pas sur ce forum
merci
jacky
 

Discussions similaires

Réponses
6
Affichages
297

Statistiques des forums

Discussions
312 545
Messages
2 089 453
Membres
104 169
dernier inscrit
alain_geremy