Migration macro Excel 2003-->2010 pb selection.autofilter

Pg70 Messages postés 3 Statut Membre -  
Pg70 Messages postés 3 Statut Membre -
Bonjour,

Je ne suis pas connaisseur des langages macro de Excel.
Je viens de migrer une personne de Office 2003 vers Office 2010, et elle me dit qu'à présent, sa macro s'arrête sur l'instruction en gras ci-dessous Selection.Autofilter.

Evidemment, la macro a été faite par une personne qui n'est plus présente dans l'entreprise.

Auriez-vous une idée de ce qui bloque ? Je pense que l'instruction n'existe plus dans Office 2010.

Range(CF).Select
ActiveCell.Offset(0, 5).Activate
CelluleFin = ActiveCell.Address
Range("F4", CelluleFin).Select
Selection.AutoFilter Field:=5, Criteria1:="11", Operator:=xlTop10Items

3 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Cette syntaxe existe toujours, la macro ne fait pas que s'arrêter, elle donne aussi un message d'erreur.

    Par contre, les méthodes employées dans les lignes précédentes sont vivement déconseillées (même sous 2003).
    0
  2. Pg70 Messages postés 3 Statut Membre
     
    Il s'agit d'un stagiaire qui a écrit cette macro il y a déjà une dizaine d'années.
    Le code n'est sans doute pas super, mais je ne peux pas juger, je ne connais pas assez.
    Effectivement, la macro s'arrête avec un message d'erreur, mais je ne sais pas comment corriger la ligne pour qu'il n'y ai plus le message d'erreur. La methode Autofilter de la classe Range a échoué

    Quel est le problème en fait ?
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Le problème c'est que sans la totalité du code, il est impossible de donner une réponse et qu'avec le code c'est parfois insuffisant, l'idéal est de disposer du fichier.
      0
  3. Pg70 Messages postés 3 Statut Membre
     
    Si la fonction existe toujours, alors pourquoi la macro fonctionne encore sous Excel 2003 (je viens de vérifier, elle marche), et quand j'ouvre le même fichier sous excel 2010, la macro me donne le message d'erreur ?

    Voici la totalité du code avec en gras la ligne où cela plante:


    Sub Archive()
    '
    ' Macro enregistrée le 30/01/01 par Damien Phulpin
    '
    Dim L

    Sheets("Saisie").Select
    Range("A5:C30").Select
    Selection.Copy

    Sheets("Archive").Select
    Range("A4").Select
    While ActiveCell.Value <> ""
    ActiveCell.Offset(1, 0).Activate
    Wend
    L = ActiveCell.Row
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False

    Sheets("Saisie").Select
    Range("E5:F30").Select
    Selection.Copy

    Sheets("Archive").Select
    Cells(L, 4).Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
    Range("A4").Select

    Sheets("Saisie").Select
    Range("A5:D30").Select
    Selection.ClearContents
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    Range("A5").Select

    End Sub
    Sub SynthéseJour()
    '
    ' Macro enregistrée le 30/01/01 , modifée le 01/07/09

    '
    Dim Machine, Famille, Arret, Equippe, Duree
    Dim Jour1, Jour2, NLm, NCm, NLf, NCf, NLe, NCe, NC
    Dim Jr1, Ms1, An1, Jr2, Ms2, An2 As String
    Dim Cfin, CelluleFin, CelluleDebut, CD, CF, Fam As String
    Dim PctgArret, Jtt, Jd, Jf
    Dim i

    Jr1 = InputBox("Jour début de calcul ?", "SUIVI ARRETS DPB PREPARATION", , 200)
    Ms1 = InputBox("Mois début de calcul ?", "SUIVI ARRETS DPB PREPARATION", , 200)
    An1 = InputBox("Année début de calcul ?", "SUIVI ARRETS DPB PREPARATION", , 200)

    Jr2 = InputBox("Jour fin de calcul ?", "SUIVI ARRETS DPB PREPARATION", , 200)
    Ms2 = InputBox("Mois fin de calcul ?", "SUIVI ARRETS DPB PREPARATION", , 200)
    An2 = InputBox("Année fin de calcul ?", "SUIVI ARRETS DPB PREPARATION", , 200)

    Sheets("Archive").Select
    Range("A2").Select
    ActiveCell.Value = Ms1 + "/" + Jr1 + "/" + An1
    Jour1 = ActiveCell.Value
    ActiveCell.Value = ">=" + Jr1 + "/" + Ms1 + "/" + An1
    Range("B2").Select
    ActiveCell.Value = Ms2 + "/" + Jr2 + "/" + An2
    Jour2 = ActiveCell.Value
    ActiveCell.Value = "<=" + Jr2 + "/" + Ms2 + "/" + An2

    Range("E5").Select
    CelluleDebut = ActiveCell.Address
    Range("D4").Select
    While ActiveCell.Value <> ""
    ActiveCell.Offset(1, 0).Activate
    Wend
    ActiveCell.Offset(0, 1).Activate
    CelluleFin = ActiveCell.Address
    CF = ActiveCell.Address
    Range("A4").Select
    CD = ActiveCell.Address

    '''''''''''''''' boucle 1: synthese par machine et famille

    Sheets("Synthése").Select
    Range("C6").Select

    Sheets("BD").Select
    Range("E2").Select
    NCm = 5
    NCf = 7
    While ActiveCell.Value <> ""
    Machine = ActiveCell.Value
    NLm = ActiveCell.Row
    Range("G2").Select
    While ActiveCell.Value <> ""
    Famille = ActiveCell.Value
    NLf = ActiveCell.Row
    Range("J2").Select
    ActiveCell.Value = Machine
    Range("K2").Select
    ActiveCell.Value = Famille
    Range("L2").Select
    Arret = ActiveCell.Value

    Sheets("Archive").Select
    Range("D2").Select
    ActiveCell.Value = Arret
    DoEvents
    Range(CD, CF).AdvancedFilter Action:=xlFilterInPlace, _
    CriteriaRange:=Range("A1:E2"), Unique:=False
    Range("E3").Select
    ActiveCell.Formula = "=SUBTOTAL(9,E5:" + CF + ")"
    Selection.Copy

    Sheets("Synthése").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    ActiveCell.Offset(0, 1).Activate
    Sheets("BD").Select
    Cells(NLf, NCf).Select
    ActiveCell.Offset(1, 0).Activate
    Wend
    Sheets("Archive").Select
    ActiveSheet.ShowAllData

    Sheets("Synthése").Select
    ActiveCell.Offset(1, -10).Activate

    Sheets("BD").Select
    Cells(NLm, NCm).Select
    ActiveCell.Offset(1, 0).Activate
    Wend

    Sheets("Synthése").Select
    Range("I1").Select
    ActiveCell.Value = Jour1
    Range("L1").Select
    ActiveCell.Value = Jour2

    '''''''''''''''' boucle 2: synthese par equipe

    Sheets("Synthése").Select
    Range("C21").Select

    Sheets("Archive").Select
    Range("A2:E2").Select
    Selection.ClearContents

    Sheets("BD").Select
    Range("E13").Select
    NCe = 5

    While ActiveCell.Value <> ""
    Equippe = ActiveCell.Value
    NLe = ActiveCell.Row
    Range("G2").Select
    While ActiveCell.Value <> ""

    Sheets("BD").Select
    Fam = ActiveCell.Text
    NLf = ActiveCell.Row

    If Fam = 4 Then
    GoTo Line10 ' Sauf les arrêts type "session"
    End If
    If Fam = 5 Then
    GoTo Line10 ' Sauf les arrêts type "silo"
    End If
    If Fam = 9 Then
    GoTo Line10 ' Sauf les arrêts type "autre"
    End If
    If Fam = 0 Then
    GoTo Line10 ' Sauf les arrêts type "masqué"
    End If

    Sheets("Archive").Select

    Range("A2").Select
    ActiveCell.Value = ">=" + Jr1 + "/" + Ms1 + "/" + An1
    Range("B2").Select
    ActiveCell.Value = "<=" + Jr2 + "/" + Ms2 + "/" + An2
    Range("C2").Select
    ActiveCell.Value = Equippe
    Range("D2").Select
    ActiveCell.Value = "?" + Fam
    Range(CD, CF).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
    "A1:E2"), CopyToRange:=Range("G4"), Unique:=False

    DoEvents

    Range("G5").Select
    Jd = ActiveCell.Value
    While ActiveCell.Value <> ""
    ActiveCell.Offset(1, 0).Activate
    Wend
    ActiveCell.Offset(-1, 0).Activate
    Jf = ActiveCell.Value
    If Jd = "" Then
    PctgArret = 0
    Else
    Range(CF).Select
    ActiveCell.Offset(0, 6).Activate
    CelluleFin = ActiveCell.Address
    Range("K3").Select
    ActiveCell.Formula = "=SUBTOTAL(9,K5:" + CelluleFin + ")"
    Arret = ActiveCell.Value
    Jtt = Jf - Jd + 1
    PctgArret = Arret / (Jtt * 24 * 9)
    End If
    Columns("G:K").Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select

    Sheets("Synthése").Select
    ActiveCell.Value = PctgArret
    ActiveCell.Offset(0, 1).Activate

    Line10:
    Sheets("BD").Select
    Cells(NLf, NCf).Select
    ActiveCell.Offset(1, 0).Activate

    Wend

    Sheets("Synthése").Select
    ActiveCell.Offset(1, -6).Activate

    Sheets("BD").Select
    Cells(NLe, NCe).Select
    ActiveCell.Offset(1, 0).Activate
    Wend

    '''''''''''''''' boucle 3: top 10

    Sheets("synthése").Select
    Range("A42:L54").Select
    Selection.ClearContents
    Range("A42").Select

    Sheets("BD").Select
    Range("D1").Select
    While ActiveCell.Value <> ""
    ActiveCell.Offset(1, 0).Activate
    Wend
    Cfin = ActiveCell.Address
    Range("A1:" + Cfin + "").Select
    Selection.AutoFilter

    Sheets("Archive").Select
    Range("A2:E2").Select
    Selection.ClearContents
    Range("A2").Select
    ActiveCell.Value = ">=" + Jr1 + "/" + Ms1 + "/" + An1
    Range("B2").Select
    ActiveCell.Value = "<=" + Jr2 + "/" + Ms2 + "/" + An2
    Range("D2").Select
    ActiveCell.Value = "<>?9" ' Sauf les arrêts type "autre"
    Range("E2").Select
    ActiveCell.Value = "<>?4" ' Sauf les arrêts type "session"
    Range("F2").Select
    ActiveCell.Value = "<>?5" ' Sauf les arrêts type "silo"
    Range("G2").Select
    ActiveCell.Value = "<>?0" ' Sauf les arrêts type "masqué"
    Range("E1").Select

    ActiveCell.Value = "MF"
    Range("F1").Select
    ActiveCell.Value = "MF"
    Range("G1").Select
    ActiveCell.Value = "MF"
    Range(CD, CF).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
    "A1:G2"), CopyToRange:=Range("F4"), Unique:=False

    Range(CF).Select
    ActiveCell.Offset(0, 5).Activate
    CelluleFin = ActiveCell.Address
    Range("F4", CelluleFin).Select
    Selection.AutoFilter Field:=5, Criteria1:="11", Operator:=xlTop10Items
    Range("F4", CelluleFin).Select
    Selection.Copy
    Range("K4").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    ActiveSheet.ShowAllData
    Range("O5").Select

    i = 0

    While ActiveCell.Value <> ""

    If i = 13 Then
    GoTo Line1
    End If

    DoEvents

    Sheets("Archive").Select
    Duree = ActiveCell.Value
    ActiveCell.Offset(0, -2).Activate
    Arret = ActiveCell.Value
    ActiveCell.Offset(0, -1).Activate
    Equippe = ActiveCell.Value

    Sheets("BD").Select
    Selection.AutoFilter Field:=1, Criteria1:=Arret
    Range("B1", Cfin).Select
    Selection.Copy
    Range("M1").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    Range("M2").Select
    Machine = ActiveCell.Value
    Range("N2").Select
    Famille = ActiveCell.Value
    Range("O2").Select
    Arret = ActiveCell.Value
    Columns("M:O").Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select

    Sheets("synthése").Select
    ActiveCell.Value = Machine
    ActiveCell.Offset(0, 1).Activate
    ActiveCell.Value = Famille
    ActiveCell.Offset(0, 1).Activate
    ActiveCell.Value = Arret
    If Equippe = "V" Then
    NCm = 4
    End If
    If Equippe = "R" Then
    NCm = 5
    End If
    If Equippe = "J" Then
    NCm = 6
    End If
    If Equippe = "O" Then
    NCm = 7
    End If
    If Equippe = "B" Then
    NCm = 8
    End If
    If Equippe = "VIO" Then
    NCm = 9
    End If
    ActiveCell.Offset(0, NCm).Activate
    ActiveCell.Value = Duree
    NC = -NCm - 2
    ActiveCell.Offset(1, NC).Activate

    Sheets("Archive").Select
    ActiveCell.Offset(1, 3).Activate

    i = i + 1

    Wend

    Line1:
    Sheets("BD").Select
    Selection.AutoFilter
    Range("J2:K2").Select
    Selection.ClearContents
    Range("A1").Select

    Sheets("Archive").Select
    Range("E3").Select
    Selection.ClearContents
    Range("A2:E2").Select
    Selection.ClearContents
    Range("A1").Select
    Columns("F:O").Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select

    Sheets("Synthése").Select
    Range("I1").Select
    ActiveCell.Value = Jour1
    Range("L1").Select
    ActiveCell.Value = Jour2
    Range("A42:N51").Select
    Selection.Sort Key1:=Range("N42"), Order1:=xlDescending, Header:=xlGuess _
    , OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Range("A1").Select

    End Sub


    Encore merci pour votre aide
    0