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

Fermé
Pg70 Messages postés 3 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 26 mai 2017 - 26 mai 2017 à 11:08
Pg70 Messages postés 3 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 26 mai 2017 - 26 mai 2017 à 16:32
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
A voir également:

3 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
26 mai 2017 à 11:32
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
Pg70 Messages postés 3 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 26 mai 2017
26 mai 2017 à 12:23
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
26 mai 2017 à 12:31
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
Pg70 Messages postés 3 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 26 mai 2017
26 mai 2017 à 16:32
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