IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur d'arguments [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 105
    Par défaut Erreur d'arguments
    Bonjour,
    J'aimerais trier une colonne après divers traitement effectué sur une feuille, mais l'erreur "Incompatibilité de type" apparaît quoi que je mette comme arguments... J'ai tout essayé, j'ai fait des recherches mais rien trouvé, donc je désespère sur cette macro tout simple a priori

    Voici mon code que génère l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Function Tri(Optional ByRef wbk As Workbook = "ThisWorkbook")
    Dim maPlage As Range
     
    Set maPlage = wbk.Worksheets("Clients").Range("J2:" & wbk.Worksheets("Clients").Range("J1").End(xlDown).Address)
     
    maPlage.Sort Key1:=Range("J2"), Order1:=xlDescending, Header:=xlNo, Orientation:=xlTopToBottom, OrderCustom:=1, MatchCase:=False, DataOption1:=xlSortNormal
     
    End Function
    Merci d'avance

    EDIT : Bon j'ai réglé mon problème de type qui venait du prototype de ma fonction, seul problème maintenant, mon tri ne fait rien, alors que j'ai aucune erreur... Voici le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public Function Tri(Optional wbk As Workbook)
    Dim maPlage As Range
     
    If wbk Is Nothing Then
    Set wbk = ThisWorkbook
    Else
    End If
     
     
    Set maPlage = wbk.Worksheets("Clients").Range("J2:" & wbk.Worksheets("Clients").Range("J2").End(xlDown).Address)
    maPlage.Sort Key1:=maPlage.Range("J2"), Order1:=xlDescending, Header:=xlNo, Orientation:=xlTopToBottom
     
    End Function

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bonjour
    Serait-il possible de voir comment tu appelles ta fonction?
    Car ton code de tri me semble bon (en tout cas il fonctionne très bien sur mon exemple)

    edit : Par don je pense que le problème viens de "Thiswokbook"
    Je vais essaye de voir comment faire

  3. #3
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,


    J'ai modifié ainsi et ça fonctionne pour moi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test_egal()
    Tri ThisWorkbook
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function Tri(ByRef wbk As Workbook)
    ' MsgBox wbk.Name
    Dim maPlage As Range
     
    Set maPlage = wbk.Worksheets(1).Range("J2:J" & wbk.Worksheets(1).Range("J1").End(xlDown).Row)
    ' MsgBox maPlage.Address
      maPlage.Sort Key1:=Range("J2"), Order1:=xlDescending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    End Function

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    en gardant le caractère optionnel de wbk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function Tri(Optional ByRef wbk as variant)
    Dim maPlage As Range
     If Not IsMissing(wbk) Then Set wbk = ThisWorkbook
     
    Set maPlage = wbk.Worksheets("Clients").Range("J2:" & wbk.Worksheets("Clients").Range("J1").End(xlDown).Address)
     
    maPlage.Sort Key1:=Range("J2"), Order1:=xlDescending, Header:=xlNo, Orientation:=xlTopToBottom, OrderCustom:=1, MatchCase:=False, DataOption1:=xlSortNormal
     
    End Function
    Je viens de vois que tu avais édité ton premier message
    juste une remarque a part tu n'est pas obligé de mettre un else dans ton if si tu n'en fait rien

    edit visiblement ismissing utilise les variant

  5. #5
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,


    Est-ce vraiment ça que tu veux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set maPlage = wbk.Worksheets(1).Range("J2:J" & wbk.Worksheets(1).Range("J1").End(xlDown).Row)
    et pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set maPlage = wbk.Worksheets(1).Range("J2:J" & wbk.Worksheets(1).Range("J65536").End(xlUp).Row)
    ?

    NB : J'ai remplaçé "Clients" par l'index 1 pour mes tests.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 105
    Par défaut
    Merci pour vos réponses rapides, j'ai édite mon premier post par rapport à mon problème initial,

    Oui c'est bien ce que je veux faire, sélectionné de la 2° a la derniere ligne utilise de la Jième colonne

    J'ai testé vos codes (en remplaçant le nom de la feuille) et j'ai des erreurs 400

  7. #7
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Par contre il y a une différence entre le code que tu utilise pour trouver la dernière ligne et celui que aalex te suggère. Le tient s'arrête a la première ligne vide le siens te donne la dernière ligne même s'il y a des ligne vide dans tes données


    Voila une version qui fonctionne effectivement tu avai un petit souci avec l'argument key tu ne précisé ni le classeur ni l'onglet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function Tri(Optional ByRef wbk As Variant)
    Dim maPlage As Range
     If IsMissing(wbk) Then Set wbk = ThisWorkbook
     
    Set maPlage = wbk.Worksheets("Client").Range("A2:" & wbk.Worksheets("Client").Range("A65536").End(xlUp).Address)
    maPlage.Sort Key1:=wbk.Worksheets("Client").Range("A2"), Order1:=xlDescending, Header:=xlNo, Orientation:=xlTopToBottom, OrderCustom:=1, MatchCase:=False, DataOption1:=xlSortNormal
    End Function
    Testé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton1_Click()
    Tri
    Tri Workbooks("Nouveau Feuille de calcul Microsoft Excel (2).xls")
    End Sub
    Les deux classeur sont bien trié thisworkbook et le nouveau

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur d'argument dans une fonction
    Par rouliane dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/12/2006, 11h52
  2. Erreur supplied argument is not a valid MySQL resource
    Par abidi_niz dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 06/09/2006, 13h26
  3. mysqli_num_rows() --> erreur d'argument
    Par Invité dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 26/08/2006, 17h38
  4. Erreur d'argument avec runqq
    Par janviech dans le forum Fortran
    Réponses: 3
    Dernier message: 11/08/2006, 09h19
  5. Erreur "Runaway argument"
    Par Doom dans le forum Erreurs - Avertissements
    Réponses: 2
    Dernier message: 02/06/2006, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo