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 :

problème de tri


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 70
    Par défaut problème de tri
    bonjour,
    apres deux jours de recherche sur les forums et une nuit blanche a essayer de comprendre, je sèche.

    apres un test de presence du champ NomPrenom, si présence je passe la routine sinon j'ecris les données dans la feuille clients

    quelqu'un peut il m'expliquer pourquoi le code joint fonctionne mais que si je fait appel a sub TriAlpha cela ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    ' test pour eviter les doublons dans onglet "Clients"
     
     
    Dim Cellule As Range
    Dim TestNomPrenom As String
     
    TestNomPrenom = TextBox2Nom.Value + TextBox3Prenom.Value
     
    With Worksheets("Clients").Range("K3:K65536")
        Set Cellule = .Find(TestNomPrenom, Lookat:=xlWhole)
        If Cellule Is Nothing Then
            'MsgBox ("pas trouvé")
            Call EntreeClient
            Range("B3:K3000").Sort Key1:=Range("B3"), Order1:=xlAscending, Key2:=Range("C3"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
     
        End If
    End With
     
    'Fermeture de la UserForm  les choix et les diffrentes saisies sont perdues effacées
    Unload UserForm1
     
    ' appel procedure de tri de la feuille "Clients"
    'Call TriAlpha
     
    ' affichage onglet Acceuil
    Worksheets("Acceuil").Select
     
    End Sub
    Sub TriAlpha()
     
    With Worksheets("Clients")
     
        Range("B3:K3000").Sort Key1:=Range("B3"), Order1:=xlAscending, Key2:=Range("C3"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
     
    End With
     
    End Sub
    merci pour vos eclaircissements

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    j'ai pas relu tout le code mais lorsque tu utilise with ..:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Worksheets("Clients")
    ensuite toutes les variables qui doivent avoir ce "with" comme racine doit commencer par un point .
    donc tous les range de ton tri :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("B3:K3000").Sort Ke.....

  3. #3
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 70
    Par défaut
    bonjour et merci pour la reponse
    mais cela ne fonctionne toujours pas quand je fais appel a la Sub TriAlpha
    je continu a chercher de mon coté
    merci pour vos futures réponses

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par arthur83fr Voir le message
    ...mais cela ne fonctionne toujours pas quand je fais appel a la Sub TriAlpha...
    et "cela" veut dire quoi ?

  5. #5
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 70
    Par défaut
    bonjour,

    alors la ligne 14 je la passe en commentaire
    j'active le call TriAlpha
    je lance le masque de saisie, je le valide et la cela m'inscrit les données dans la feuilles "Clients" mais sans les trier en alphabetique

    si ligne 14 active et call TriAlpha en commetaire cela fonctionne : il y a bien tri alphabetique dans feuille "clients" apres ajout des données.


    j'ajoute que j'ai bien mis des . devant chaque Range

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    désolé je comprends toujours pas


    pour ta ligne 14 tu as oublié de préciser sur quel classeur et sur quelle feuille devait agir ton tri ... Pour éviter les erreurs il faut toujours préfixer les "range.." par le classeur et la feuille concernée... (un with peu aider à faire cela ..)

  7. #7
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 70
    Par défaut
    bonjour,

    voila j'ai tenu compte de vos remarques

    j'ai rajouté un with en ligne 15 afin de bien preciser ou je faisais mon tri

    si j'utilise le code ci dessous, cad sans utiliser les lignes 24 et 25, j'arrive bien a obtenir le remplissage de la feuille clients ainsi que son tri.

    Par contre si j'inhibe les lignes 14 a 17 et que j'active la ligne 24,25 ( procedure de tri) la j'obtiens l'enregistrement des données dans la feuille "clients" mais je n'obtiens pas le tri de celle ci.

    j' espere m'être bien expliqué


    ma question est pourquoi cela coince t il avec la procedure Tri Alpha ligne 31 a 37 ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    ' test pour eviter les doublons dans onglet "Clients"
     
     
    Dim Cellule As Range
    Dim TestNomPrenom As String
     
    TestNomPrenom = TextBox2Nom.Value + TextBox3Prenom.Value
     
    With Worksheets("Clients").Range("K3:K65536")
        Set Cellule = .Find(TestNomPrenom, Lookat:=xlWhole)
        If Cellule Is Nothing Then
            'MsgBox ("pas trouvé")
            Call EntreeClient
            ' tri alphabetique Nom et Prenom de la feuille "clients"
            With Worksheets("Clients")
            Range("B3:K3000").Sort Key1:=Range("B3"), Order1:=xlAscending, Key2:=Range("C3"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
            End With
        End If
    End With
     
    'Fermeture de la UserForm  les choix et les diffrentes saisies sont perdues effacées
    Unload UserForm1
     
    ' appel procedure de tri de la feuille "Clients"
    'Call TriAlpha
     
    ' affichage onglet Acceuil
    Worksheets("Acceuil").Select
     
    End Sub
    Sub TriAlpha()
     
    With Worksheets("Clients")
     
        .Range("B3:K3000").Sort Key1:=.Range("B3"), Order1:=xlAscending, Key2:=.Range("C3"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
     
    End With
     
    End Sub

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Encore une fois,le with en ligne 15 ne sert à rien si tu ne rajoute pas des points "." pour définir l'endroit ou celui-ci doit agir :

    Citation Envoyé par bbil Voir le message
    j'ai pas relu tout le code mais lorsque tu utilise with ..:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Worksheets("Clients")
    ensuite toutes les variables qui doivent avoir ce "with" comme racine doit commencer par un point .
    donc tous les range de ton tri :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("B3:K3000").Sort Ke.....

  9. #9
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    j'ai rajouté un with en ligne 15 afin de bien preciser ou je faisais mon tri
    Apparemment tu n'as pas compris totalement les remarques de Bbil


    Sinon, essaies ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Dim Cellule As Range
    Dim TestNomPrenom As String
     
    TestNomPrenom = TextBox2Nom.Value & TextBox3Prenom.Value
    If TestNomPrenom <> "" Then
        With Worksheets("Clients")
            Set Cellule = .Range("K:K").Find(TestNomPrenom, Lookat:=xlWhole)
            If Cellule Is Nothing Then
                Call EntreeClient
                ' appel procedure de tri de la feuille "Clients"
                Call TriAlpha
            Else
                Set Cellule = Nothing
            End If
        End With
    End If
    'Fermeture de la UserForm  les choix et les diffrentes saisies sont perdues effacées
    Unload UserForm1
    End Sub
    Private Sub TriAlpha()
     
    With Worksheets("Clients")
        .Range("B3:K3000").Sort Key1:=.Range("B3"), Order1:=xlAscending, Key2:=.Range("C3"), Order2:=xlAscending, Header:=xlGuess
    End With
    End Sub

  10. #10
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 70
    Par défaut
    bonjour,

    merci de vos reponse

    pour bbil :
    oupps mauvais copier coller désolé

    pour mercatog :
    le code fournit fonctionne


    mais je comprends toujours pas pourquoi quand je faisais appel a Sub TriAlpha dans mon code, cette routine ne faisait pas le tri des données dans la feuille clients

  11. #11
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Tu déchargeais ton userform avant que l'appel de TriAlpha est fait.
    Remarque ceci par ces 2 exemples

    Mets un userform avec 2 boutons et teste-les comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton1_Click()
     
    MsgBox "CODE 1"
    Unload Me
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton2_Click()
     
    Unload Me
    MsgBox "CODE 2"
    End Sub

  12. #12
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 70
    Par défaut
    bonjour,

    merci encore pour vos réponses et votre patience

    pour mercatog:
    c'était un truc tout bête qui ne me sautait pas aux yeux grrr
    je vais vraiment changer de lunette lol

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

Discussions similaires

  1. [MySQL] Problème de tri
    Par pounie dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 22/10/2005, 13h09
  2. Problème de tri avec analyse croisée
    Par drthodt dans le forum Access
    Réponses: 2
    Dernier message: 18/10/2005, 16h23
  3. [TToolBar] Problème de tri
    Par titiyo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 01/09/2004, 09h21
  4. [Collections] Problème de tri
    Par feti2004 dans le forum Collection et Stream
    Réponses: 16
    Dernier message: 03/08/2004, 16h45
  5. problème de tri et optimisatiopn
    Par psyco2604 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 13/05/2004, 10h44

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