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

VBA Discussion :

Probleme Tri vba


Sujet :

VBA

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut Probleme Tri vba
    Bonsoir,

    Sans la partie concernant le tri, ma macro compile mais avec non. Je ne comprends pas. Sur la feuille en question dans à partir de B3 jusqu'à BX il y a les noms et sur C3 jusqu'à CX il y a les prénoms et dans les ordres colonnes c'est-à-dire dans la A, C, D jusqu'à Z il y a des informations pour chaque personne.
    Je voudrais faire le tri par ordre alphabétique en regardant d'abord les noms puis les prénoms.

    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
    Sub Macro3()
        Dim i As Long, DerLigne As Long
        Dim date1 As Date, date2 As Date
     
     
        ' On vide la liste
        UserForm1.ListBox1.Clear
     
        'On trouve la ligne à partir de laquelle il n y a plus d'informations
        Dernligne = Sheets("Liste des usagers").Range("B" & Rows.Count).End(xlUp).Row
     
        Sheets("Liste des usagers").Rows("3:DernLigne").Select
        Selection.Sort Key1:=Range("B3"), Order1:=xlAscending, Key2:=Range("C3") _
            , Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False _
            , Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
            xlSortNormal
     
     
        For i = 3 To Dernligne
            date1 = DateSerial(Year(Now), Month(Now), Day(Now))     'On stocke l année, le mois, et le jour dans cette variable
            date2 = Sheets("Liste des usagers").Cells(i, 4).Value       'On stocke la date d expiration
     
            If date2 - date1 < 30 Then
                UserForm1.ListBox1.AddItem (Cells(i, 2) & " " & Cells(i, 3) & " Carte n° " & Cells(i, 1) & " ---> " & date2 - date1 & " " & "jour(s)")
                Rows(i & ":" & i).Select
                Selection.Font.ColorIndex = 3
            Else
                Rows(i & ":" & i).Select
                Selection.Font.ColorIndex = 1
            End If

    Merci de me répondre.

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonsoir.
    Citation Envoyé par Alcove Voir le message
    Sans la partie concernant le tri, ma macro compile mais avec non. Je ne comprends pas
    Merci d'être plus explicite, ne serait-ce clairement indiquer le message d'erreur et la ligne le déclenchant par exemple …

    A tout hasard, la ligne n°12 ? Dans laquelle se trouve une faute de grand débutant : confusion de texte et de variable ‼

    Peut-être plus simple avec CurrentRegion

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Oui ca me met à cette ligne Error "13"
    Type mismatch (un problème avec le type, mais je vois pas lequel)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    D'après ce que je vois currentregion sélectionne toutes les cellules se touchant et n'étant pas vides or ce n'est pas mon cas car moi sur la ligne 1 j'ai des cases contenant des choses et je ne veux pas les sélectionner

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    A la ligne 12 j ai changé DerLigne qui devait problème par un entier et ca compile, le soucis que le tri ne marche pas, ca ne tri pas les noms par ordre croissant

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    DerLigne étant une variable, elle ne peut donc être effectivement entre guillemets dans du texte (d'où l'erreur),

    comme par exemple Rows.Count en ligne n°10 …

    Pour le tri corriger le positionnement des clefs car Range("B3") seul veut dire qu'il s'agit de la feuille active ‼

    Exemple structuré à partir de la ligne n°10 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        With Worksheets("Liste des usagers")
            DernLigne = .Cells(Rows.Count, 2).End(xlUp).Row
            .Rows("3:" & DernLigne).Sort .[B3], xlAscending, .[C3], , xlAscending, Header:=xlYes
     
            ' suite du code
     
        End With
    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    En remplaçant par ce que vous dites ca compile mais ca ne trie toujours 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
    38
    Sub Macro4()
     
    Dim i As Long, DerLigne As Long
    Dim date1 As Date, date2 As Date
     
     
        ' On vide la liste
        UserForm1.ListBox1.Clear
     
        'On trouve la ligne à partir de laquelle il n y a plus d'informations
        With Worksheets("Liste des usagers")
            DernLigne = .Cells(Rows.Count, 2).End(xlUp).Row
            .Rows("3:" & DernLigne).Sort .[B3], xlAscending, .[C3], , xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False _
           , Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
           xlSortNormal
     
        End With
     
     
        For i = 3 To DernLigne
            date1 = DateSerial(Year(Now), Month(Now), Day(Now))     'On stocke l année, le mois, et le jour dans cette variable
            date2 = Sheets("Liste des usagers").Cells(i, 4).Value       'On stocke la date d expiration
     
            If date2 - date1 < 30 Then
                UserForm1.ListBox1.AddItem (Cells(i, 2) & " " & Cells(i, 3) & " Carte n° " & Cells(i, 1) & " ---> " & date2 - date1 & " " & "jour(s)")
                Rows(i & ":" & i).Select
                Selection.Font.ColorIndex = 3
            Else
                Rows(i & ":" & i).Select
                Selection.Font.ColorIndex = 1
            End If
     
        Next i
     
        UserForm1.Show  'On affiche le UserForm1
     
     
    End Sub

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Si le tri fonctionne manuellement, le refaire en utilisant l'Enregistreur de macros et comparer les codes …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Le soucis est qu'en manuel je ne peux pas faire le tri que je veux car les noms et prenoms sont dans les colonnes B et C donc si je veux trier manuellement par ordre alphabétique tout en déplacant les autres informations concernant les personnes je dois commencer par sélectionner la case B3 en allant jusqu'à par exemple Z100. Là ca va marcher sauf qu'il y aussi des informations dans la colonne A (numéro des cartes de chaque personne) et ca je ne pas le sélectionner en meme temps.

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Rien n'empêche de sélectionner un bloc à partir de la colonne A puis d'effectuer un tri avec une clef dans la colonne B !

    De toute manière, si tu n'y arrives pas en manuel, pas possible alors en VBA …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Il y a forcément un moyen, sinon ca sert à rien de programmer si certaines ne peuvent pas être faites

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Surtout que ca me semblait être quelque chose de basique pour les personnes qui manipulent assez bien le VBA

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Je ne comprends pas pourquoi avec ceci ca ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sheets("Liste des usagers").Rows("3:1000").Select
        Selection.Sort Key1:=Range("B3"), Order1:=xlAscending, Key2:=Range("C3") _
           , Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False _
           , Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
           xlSortNormal
    Si on détaille ca donne:
    Sélection sur la feuille 'Liste des usagers' des lignes allant de 2 à 1000.
    Tri sur les colonnes B et C par ordre alphabétique (pour faire court)

    Est ce que je me trompe ?

  14. #14
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Oui il y a erreur comme déjà indiqué, Range("B3") seul pointe sur la feuille active …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Non il y a C3 aussi

  16. #16
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    ????????????

  18. #18
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Range( ) seul pointe donc sur la feuille active

    contrairement à Rows("3:1000") pointant sur la feuille "Liste des usagers"

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Mais que dois-je mettre alors, pour moi quand je mets Range(B3) ca tri la colonne à partir de B3, je vois le problème qu'il y ait "une pointe".

    A l AIIIIIIIIIIIIIIIIIIIDE

  20. #20
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Commencer par respecter la hierarchisation des objets d'Excel ‼

    Soit en précisant pour chaque objet la feuille auquel il est rattaché, soit en activant au préalable la feuille
    soit comme dans le post #6 …

    Mais sans y arriver manuellement, ce n'est pas la peine en VBA !

    Donc commencer par sélectionner la plage à trier puis effectuer le tri …
    Une fois que c'est bon, fermer le classeur sans l'enregistrer, le ré-ouvrir puis procéder de nouveau à la même manipulation
    en activant au préalable l'Enregistreur de macros …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. probleme tri en java
    Par kloe dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 18/10/2006, 23h01
  2. Probleme code vba
    Par alex38 dans le forum Access
    Réponses: 6
    Dernier message: 18/04/2006, 12h10
  3. probleme code vba ne s'execute pas apres instruction sql
    Par arnogef dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 29/12/2005, 12h34
  4. [debutant]XSL: Probleme tri et sommation !
    Par paparkha dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 12/08/2005, 20h23
  5. [Débutant] Petit probleme try catch
    Par Terminator dans le forum Langage
    Réponses: 16
    Dernier message: 30/06/2005, 13h21

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