Microsoft 365 VBA erreur d'exécution 1004 : méthode range de l'objet _global

FreshMan

XLDnaute Nouveau
Bonjour à tous,

Novice en VBA, j'ai créé un formulaire pour remplir une base de données (tableau) qui fonctionnait bien jusqu'à maintenant..
Cependant au moment de la fermeture, j'aimerais que le tableau se trie automatiquement, j'avais donc écrit le code suivant :

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
ActiveWorkbook.Worksheets("Affaires").ListObjects("AffairesTab").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Affaires").ListObjects("AffairesTab").Sort. _
SortFields.Add2 Key:=Range("AffairesTab[[#All],[Délai fabrication]]"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets("Affaires").ListObjects("AffairesTab").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Je reçois alors une erreur d'exécution "1004 : méthode range de l'objet _global"
J'ai mis en jaune où le débogage situe l'erreur.

La colonne à trier est calculé à partir des données rentraient dans le tableau. Elle est composé de nombre (délai en jour) ou si rien n'est rentré, des mots comme "pas de date prévu" ou "livré"
Je me demande si cela vient du faite que j'ai à la fois des nombres et des mots dans la colonne à trier, toutefois cela fonctionne bien lorsqu'on trie "manuellement" le tableau avec la fonction tri

Merci d'avance pour votre aide!

Freshman
 
Solution
Re,
J'ai repris le code de l'enregistreur.
J'ai supprimé cette macro de l'événement UserForm_QueryClose, j'y ai mis un call TRI.
Et la macro de tri je l'ai mise dans un module.
Il n'y a pas d'erreur de compil.
Par contre la pertinence des résultats ... ainsi que quoi trié ! J'ai mis par défaut sur délai de fabrication.
Mais au moins cela fait une base de travail saine sans erreur.

Dranreb

XLDnaute Barbatruc
Moi je pense toujours que c'est parce qu'il n'assume pas dans les deux cas pour l'argument Key la méthode Range du même objet Worksheet non précisé, et que ça ne marche pas s'il en assume un qui représente une autre feuille que celle qui contient le tableau.
Le Show du UserForm est-il il commandé de puis un module d'objet Worksheet différent par exemple ?
Moi je n'utilise jamais Range ni Cells sans préciser devant de quel objet Worksheet il s'agit.
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
C'est là que j'ai un souci.
L'Userform est bien appelé de cette page. J'ai bien pris soin en début de macro de re préciser la feuille. et tous les objets sont bien spécifiés sur cette page.
Si je met in extenso cette macro dans UserForm_QueryClose il y a un bug. Si je met dans cette macro uniquement un call Tri, et Tri dans un module ça marche, d’où mon questionnement.
 

Dranreb

XLDnaute Barbatruc
Mets une MsgBox Range("A1").Worksheet.Name devant les tris, peut être que ça éclaircira les choses. Dans un module standard il prend la métode Range de l'objet Application qui elle même invoque celle de ActiveSheet. Dans un module d'objet Worksheet il prend celle de cet objet. Dans un UserForm affiché depuis un module d'objet Worksheet, je ne sais pas en fait. Et je m'en fiche, parce que moi je précise toujours l'objet Worksheet devant. Le plus souvent c'est son nom dans la rubrique Microsoft Excel Objets, sinon c'est une variable commençant par Wsh préalablement initialisée.
 

Discussions similaires

Statistiques des forums

Discussions
311 709
Messages
2 081 779
Membres
101 816
dernier inscrit
Jfrcs