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

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. 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
    1. 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. 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
    2. 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