XL 2010 Problème sur Macro

Mcintosh34

XLDnaute Nouveau
Bonjour,

Je voudrais réaliser un programme en VBA sur excel, alors j'ai demandé à une personne de me le faire, mais seulement il y a une erreur, et je n'arrive pas à la corriger.
Pouvez vous m'aider ?
Je vous ai joint 2 Screenshots et le programme.

Merci
 

Pièces jointes

  • screen1.png
    screen1.png
    18.1 KB · Affichages: 15
  • screen2.png
    screen2.png
    21 KB · Affichages: 11
  • PARLOIR.xlsm
    22.9 KB · Affichages: 3

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Dans le fichier joint une seule macro pour trier et deux autres pour l'appeler:

VB:
Sub Trier(EtiquetteColonne As String)
    Dim plgToSort As Range
    Dim sortKey As Range
    Dim idx As Variant

    With ActiveWorkbook.Worksheets("Feuil1")
        .Unprotect

        ' Définition de la plage à trier
        ' Tableau de la cellule C4
        With .Range("C4").CurrentRegion
            '
            ' Chercher l'EtiquetteColonne de colonne dans la ligne 1 du tableau
            idx = Application.Match(EtiquetteColonne, .Rows(1), 0)
            '
            ' Sortir si l'EtiquetteColonne passée en paramètre n'a pas été trouvée
            If IsError(idx) Then
                MsgBox "L'Etiquette de colonne " & EtiquetteColonne & " n'a pas été trouvée dans la ligne 1 du tableau!", _
                        vbExclamation, "Tri du tableau"
                Exit Sub
            Else
                Set sortKey = .Cells(1, idx)
            End If
            '
            ' Sans l'EtiquetteColonne
            Set plgToSort = .Offset(1).Resize(.Rows.Count - 1)
        End With

        ' Prépartion du tri
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=sortKey, _
                             SortOn:=xlSortOnValues, _
                             Order:=xlAscending, _
                             DataOption:=xlSortNormal
        With .Sort
            .SetRange plgToSort
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End With
End Sub

Sub ALPHA()
    Trier "NOM"
End Sub

Sub ECROU()
    Trier "ECROU"
End Sub

S'il ne faut pas trier la colonne A, remplacer la ligne:
Set plgToSort = .Offset(1).Resize(.Rows.Count - 1)
par celle-ci:
Set plgToSort = .Offset(1,1).Resize(.Rows.Count - 1, .Columns.Count-1)

Bon week-end
 

Pièces jointes

  • PARLOIR.xlsm
    26 KB · Affichages: 5

Discussions similaires

Réponses
3
Affichages
91

Statistiques des forums

Discussions
312 078
Messages
2 085 120
Membres
102 783
dernier inscrit
Basoje