Appel de fonction et erreur 1004

Bonjour à tous,
dans mon code VBA je faisais souvent des tri de colonnes et extraction sans doublons sur différents onglets, j’ai donc voulu mettre ça dans une fonction, à la compil aucune erreur, mais à l’exécution j’ai une erreur 1004 sur la ligne .Apply
voici le code de la fonction :

Function Tri_Doublons(Onglet As Worksheet, Col_Deb As String, Col_Fin As String)
’ Tri des colonnes et extraction des doublons et ajustement des largeurs de colonnes
Onglet.Select
’ On force le format texte avant tri et extraction sans doublon sur 500 000 lignes
Columns(Col_Deb & « : » & Col_Fin).Select
Selection.NumberFormat = « @ »
Range(Col_Deb & « 1: » & Col_Fin & « 500000 »).Select
Onglet.Sort.SortFields.Clear
Onglet.Sort.SortFields.Add2 Key:=Range(Col_Deb & « 2: » & Col_Fin & « 500000 »), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With Onglet.Sort
.SetRange Range(Col_Deb & « 1: » & Col_Fin & « 500000 »)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Onglet.Range(Col_Deb & « 1: » & Col_Fin & « 500000 »).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7), Header:=xlYes
‹  ›’ On ajuste la largeur des colonnes
Onglet.Range(Col_Deb & « : » & Col_Fin).Columns.AutoFit
End Function

Avez-vous une idée pour solutionner mon problème ?

Re,
Si on fait une fonction, on devrait avoir une sortie,
Et sur votre fonction on n’en trouve pas.

Exemple

Function Tri_Doublons(Onglet As Worksheet, Col_Deb As String, Col_Fin As String)
.............................
.............................
.............................
Tri_Doublons = blablabla 'dont blablabla sera la sortie
End Function

Cordialement

Merci du retour, mais j’ai 2 autres fonctions qui ne renvoient rien non plus et ça ne pose aucun problème, exemple celle-ci que j’utilise pour effacer toutes les données d’un onglet :

Function RAZ_Onglet(Onglet As Worksheet)
’ On efface les données dans l’onglet spécifié dans l’appel de la fonction
Onglet.Select
Call Suppr_Filtres(Onglet)
’ On sélectionne toutes les celulles et on efface le contenu
Range(« A2:XFD1048576 »).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
’ On clique sur A1 pour annuler la sélection active
Range(« A1 »).Select
End Function

Je pense qu’on est sur une erreur liée à ma réécriture avec variables, j’avais enregistré la macro en faisant les manips sur Excel, ensuite j’ai modifié le code pour insérer les variables. Peut-être que
.SetRange Range(Col_Deb & « 1: » & Col_Fin & « 500000 »)
ne renvoie pas bien le
.SetRange Range(« A1:G500000 ») attendu ?
Merci

Re,
Avez vous un tableau qu’on pourrait tester cette formule ?
cordialement

Bonjour,

J’ai repris mes extraits de code dans le tableau ci-joint, merci encore pour votre aide :slight_smile:
Macro Copie et Tri Doublons.xlsm (22,0 Ko)

Bonjour,
Inutile tes fonctions
Teste cette macro

Sub Macro1()
    Dim i%, j%, Dl%
    Dim Ws As Worksheet, Wd As Worksheet
    Set Ws = Sheets("BDD")
    Set Wd = Sheets("Tri")
    Dl = Ws.Range("A" & Rows.Count).End(xlUp).Row

      With Wd
        .Cells.Delete Shift:=xlUp
      End With
    Ws.Range("A1:E" & Dl).Copy
    Sheets("Tri").Activate
    Range("A1").PasteSpecial Paste:=xlPasteValues
    Range("A1:E7" & Dl).Select
    Selection.AutoFilter
    ActiveWorkbook.Worksheets("Tri").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Tri").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "A1:A1" & Dl), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Tri").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Selection.AutoFilter
    Range("A1").Select
End Sub

Bonjour, ça semble inutile dans ce petit fichier effectivement, mais dans mon projet c’est une manip que je fais une dizaine de fois, donc je me suis dit que j’allais faire des fonctions publiques pour les appeler et simplifier le code… ça fonctionne bien pour les 2 autres, mais pas pour celle qui fait l’extraction sans doublon

Re,
A tester
Macro Copie et Tri Doublons.xlsm (21,6 Ko)

Re,
ça fonctionne bien, le seul souci c’est que tu as mis en dur les noms des feuilles, moi j’avais en variable d’entrée Onglet, qui est passé en argument d’appel avec la variable correspondant à la feuille.
Dans ce petit tableau je n’ai que 2 onglets, dans mon projet j’en ai 12 :wink:
En tout cas merci beaucoup, je vais voir si j’arrive à adapter ça

Re,
Il suffir juste de modifier dans la macro d’origine les liens des onglets

1 « J'aime »

Je vais voir ça lundi, j’ai encore un soucis en fonction du nombre de colonnes, des fois c’est 3, des fois c’est 4, ou plus, donc je dois paramétrer ce qui va aller dans ce bout de code :
Columns:=Array(1, 2, 3, 4, 5)
en fonction du nombre de colonnes de la feuille traitée, mais avec ta variable Dc% ça devrait être facile.
Merci encore :slight_smile: et bon week-end !

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.