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 :

Tri par ordre alphabétique ne fonctionne pas [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Par défaut Tri par ordre alphabétique ne fonctionne pas
    Bonjour à tous

    Je ne comprend rien à mon problème qui devrait pourtant être simple. A l'aide d'un UserForm, j'inscris des valeur dans un tableau qui me sert de base données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'incrémentation de la désignation et du fournisseur dans la base de données
    Sheets("Feuil3").Range("a500").End(xlUp).Offset(1, 0) = Me.Text2.Text
    Sheets("Feuil3").Range("a500").End(xlUp).Offset(1, 1) = Me.Text1.Text
    'incrémentation du Prix dans la BD
    Sheets("Feuil3").Range("a500").End(xlUp).Offset(1, 2) = Me.Text3.Text
    Sheets("Feuil3").Range("a500").End(xlUp).Offset(1, 3) = Me.List1.Text
    Jusque là pas de problème, les valeurs sont inscrites sur la dernière ligne vide du tableau, mais quand je veux trier par ordre alphabétique, seul la valeur de la colonne A est déplacée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ActiveWorkbook.Worksheets("Feuil3").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Feuil3").Sort.SortFields.Add Key:=Range("A2"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Feuil3").Sort
            .SetRange Range("A2:D500")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    J'utilise exactement le même code sur la Feuil2 avec d'autre données et cela fonctionne impeccable !

    Je n'arrive pas à trouver mon erreur

    Merci pour votre aide

    Cordialement

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    ce n'est pas là? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      Dim Der_Ligne As Integer
            Der_Ligne = Sheets("feuil3").Range("A65956").End(xlUp).Row + 1
     
     
     
       Sheets("feuil3").Cells(Der_Ligne, 1) = Me.Text2.Text
       Sheets("feuil3").Cells(Der_Ligne, 2) = Me.Text1.Text
       Sheets("feuil3").Cells(Der_Ligne, 3) = Me.Text3.Text
       Sheets("feuil3").Cells(Der_Ligne, 4) = Me.List1.Text
    Cordialement,

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Par défaut
    Merci, le code fonctionne
    Je ne comprend toujours pas pourquoi mon code ne fonctionnait pas ; bien sur en repartant à chaque fois du bas du tableau pour inscrire les valeurs, en plus avec des "offset", j'aurais pu faire plus simple, mais les valeurs étaient bien inscrites sur la même ligne sans pour autant être triées

    Pour la feuil2 j'ai ce code tout aussi bancale puisque c'est le même , mise à part qu'il fonctionne

    la seule différence est que je ne fait que des offset sur la ligne, mais pour la feuil3 j'avais fait pareille au début sans résultat

    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
     
    'incrémentation du nom et du matricule dans la base de données
    Sheets("Feuil2").Range("A150").End(xlUp).Offset(1, 0) = Me.Text2.Text
    Sheets("Feuil2").Range("B150").End(xlUp).Offset(1, 0) = Me.Text1.Text
    'incrémentation du tarif horaire dans la BD
    Sheets("Feuil2").Range("c150").End(xlUp).Offset(1, 0) = Me.Text3.Text
     
     
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Add Key:=Range("A2"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Feuil2").Sort
            .SetRange Range("A2:C150")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

    Les mystères de l'informatique ?

    Enfin encore merci pour ton aide

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Lorsque l'on programme des procédures pratiquement identiques (ici un tri sur une feuille), on a intérêt pour éviter les problèmes et surtout pour une maintenance aisée de créer une procédure (Sub ou Function) avec un ou plusieurs arguments comme par exemple Procédure de tri - Excel 2003-2010 .
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Par défaut
    Merci pour le conseil,
    c'est vrai que j'ai la même procédure qui ce répète 2 fois, seule La plage de cellule et la feuille change. Comme le code avait l'air simple et pas trop long, je n'ai pas jugé utile de créer une fonction, mais maintenant je vois bien que ça m'aurait éviter des erreurs

    merci encore à tous

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    Bonjour,

    Dans ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'incrémentation de la désignation et du fournisseur dans la base de données
    Sheets("Feuil3").Range("a500").End(xlUp).Offset(1, 0) = Me.Text2.Text
    Sheets("Feuil3").Range("a500").End(xlUp).Offset(1, 1) = Me.Text1.Text
    'incrémentation du Prix dans la BD
    Sheets("Feuil3").Range("a500").End(xlUp).Offset(1, 2) = Me.Text3.Text
    Sheets("Feuil3").Range("a500").End(xlUp).Offset(1, 3) = Me.List1.Text
    Tu vas chercher la dernière ligne vide de la colonne A !? Donc au défilement de ton code si on imagine que tu te situe sur la ligne 20 te text2 va s'inscrire sur la A21 et le text1 sur la B22 puisque à cet endroit la dernière ligne vide de la colonne A est bien la 22!!!

    Sinon je suis d'accord avec Philippe!

    Cordialement,

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

Discussions similaires

  1. Tri par ordre alphabétique d'un tabular
    Par max0u86 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 21/08/2008, 22h31
  2. Tri par ordre alphabétique sans tenir compte d'une chaîne
    Par Msieurduss dans le forum Requêtes
    Réponses: 3
    Dernier message: 24/06/2008, 10h32
  3. problème tri par ordre alphabétique
    Par bibi 8002 dans le forum Word
    Réponses: 17
    Dernier message: 18/06/2008, 15h21
  4. Réponses: 8
    Dernier message: 26/07/2007, 11h46
  5. Tri par ordre alphabétique
    Par orus8 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/04/2003, 19h27

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