Erreur VBA "1004" sur "Apply"
Z
Bonjour à tous,
Je suis coincée :(
J'ai une erreur sur une macro qui fonctionnait pourtant bien. Je ne comprend pas d'où elle vient.
Voici le code:
Option Explicit
Public WB_CampagneE As Workbook 'Classeur : SOURCE
Public WS_Main As Worksheet 'Questionnaire et Conclusion : SOURCE
Public WS_Temp As Worksheet ' Email manager
Public WS_Base As Worksheet ' Onglet Base : thisworkbook
Public WB_Manager As Workbook 'Classeur de destination
Public NBlignes As Long ' nombre de ligne dans mon tableau : Source
Public NBlignes_coll As Long ' nombre de ligne dans mon tableau Base thisworkbook
Public Col_Collab As Integer 'colonne email collab : Base
Public Col_Man As String 'Colonne du manager dans mon tableau : Source
Public TitreCol As Range ' premiere cellule de la colonne manager : Source
Public Nbligne_Man As Long ' nombre de ligne de l'onglet manager : Source
Public Email_Manager As String 'email du manager : Source
Public i As Long
Public Adresse_Macro As String ' adresse du classeur macro (thisworkbook) pour l'enregistrement des sous-classeurs managers
Public NomDuFichier As String ' nom du fichier manager
Public OdictFDF As Scripting.Dictionary
__
Sub Split_Manager_Macro() 'seulement création de l'onglet manager
Application.ScreenUpdating = False
Set WB_CampagneE = ActiveWorkbook
Set WS_Main = WB_CampagneE.Worksheets("Questionnaire et Conclusion")
WS_Main.Activate
Col_Man = "D"
Set TitreCol = Cells(1, 4)
NBlignes = Cells(1, 1).CurrentRegion.Rows.Count
Call Procedure_collaborateurs
---
Sub Procedure_collaborateurs()
Dim email_collab As String
Dim Histo_Form_Coll As String
Dim Col_Form As Long
Dim Col_Statut_form As Long
Dim col_coll_lettre As String
Set OdictFDF = New Scripting.Dictionary
'Dans l'onglet base
Col_Collab = 11 'K
col_coll_lettre = "K"
Col_Form = 20 'T
Col_Statut_form = 28 'AB
Set WS_Base = ThisWorkbook.Sheets("Base")
NBlignes_coll = WS_Base.Cells(1, 1).CurrentRegion.Rows.Count
'TRIER SELON EMAIL COLLAB
WS_Base.Activate
ActiveWorkbook.ActiveSheet.AutoFilter.Sort. _
SortFields.Add2 Key:=Range(col_coll_lettre & "1:" & col_coll_lettre & NBlignes_coll), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.ActiveSheet.AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'boucle i sur les adresse emails collab
Histo_Form_Coll = "" 'on initialise la valide à vide
For i = 2 To NBlignes_coll
email_collab = WS_Base.Cells(i, Col_Collab).Value
' tant que l'adresse emaiil de la nouvelle ligne est identique à la première du bloc email alors faire
While WS_Base.Cells(i, Col_Collab).Value = email_collab
If WS_Base.Cells(i, Col_Statut_form).Value = "Réalisé" Or WS_Base.Cells(i, Col_Statut_form).Value = "inscrit" Then
Histo_Form_Coll = WS_Base.Cells(i, Col_Form).Value & " | " & Histo_Form_Coll ' concaténation des formations du collab' '" | " pour séparer (Pipe avec le trait de la touche 6)
'Histo_Form_Coll = comme une valise
End If
i = i + 1
If i > NBlignes_coll Then Exit Sub
Wend
i = i - 1
'création dictionnaire collab et vérifier la taille de Histo_form_coll
OdictFDF.Add email_collab, Histo_Form_Coll
Histo_Form_Coll = "" 'vide la valise
Next i
End SubJe vous joins 2 extraits de mes fichiers. l'onglet "Base" se trouve sur le fichier "forum Base"
Merci beaucoup pour votre aide
Bonjour,
La syntaxe correcte est AutoFilter.ApplyFilter. Soit
With ActiveWorkbook.ActiveSheet.AutoFilter
With .Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
End With
.ApplyFilter
End WithBonne journée
Z
Merci beaucoup pour ta réponse :)
Cela fonctionne.