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 :

Associer LEFT et RANGE en VBA [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut Associer LEFT et RANGE en VBA
    Bonsoir à tous,

    j'ai un module qui fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub tri1()
     
        Range("A1").CurrentRegion.Sort key1:=Range("C1"), order1:=xlAscending, dataoption1:=xlSortNormal, _
                                       key2:=Range("B1"), order2:=xlAscending, dataoption2:=xlSortNormal, Header:=xlYes
     
    End Sub
    ça effectue le tri du tableau en prenant comme critère la colonne C et la colonne B

    L'embêtant est que j'ai dû créer une colonne intermédiaire (la colonne C) pour avoir le premier caractère gauche de la cellule A correspondante.
    Est-il possible de supprimer cette colonne C et traiter directement le tri par ce code (qui lui ne fonctionne pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A1").CurrentRegion.Sort key1:=Left(Range("A1"), 1), order1:=xlAscending, dataoption1:=xlSortNormal, _
                                       key2:=Range("B1"), order2:=xlAscending, dataoption2:=xlSortNormal, Header:=xlYes
    Merci d'avance du coup de main.
    Curt

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par curt Voir le message

    Bonjour,

    A tester:
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Sub TestTriSelonColonnesAetB()
     
        TriSelonColonnesAetB Sheets("Feuil1"), 1
        MsgBox "Fin du tri !", vbInformation
     
    End Sub
     
    Sub TriSelonColonnesAetB(ByVal FeuilleATrier As Worksheet, LigneDeTitre As Long)
     
    Dim I As Long, DerniereLigne As Long, ColonneTri As Long
    Dim AireATrier As Range
    Dim AireColonneATrier As Range
     
        Application.ScreenUpdating = False
     
        With FeuilleATrier
     
             ColonneTri = .Cells(LigneDeTitre, .Columns.Count).End(xlToLeft).Column + 1
             .Cells(LigneDeTitre, ColonneTri) = "Tri"
             DerniereLigne = .Cells.SpecialCells(xlCellTypeLastCell).Row
             If DerniereLigne = LigneDeTitre Then Exit Sub
     
             For I = LigneDeTitre + 1 To DerniereLigne
                 .Cells(I, ColonneTri) = Left(.Cells(I, 1), 1) & .Cells(I, 2)
             Next I
     
             Set AireATrier = .Range(.Cells(LigneDeTitre, 1), .Cells(DerniereLigne, ColonneTri))
             Set AireColonneATrier = .Range(.Cells(LigneDeTitre, ColonneTri), .Cells(DerniereLigne, ColonneTri))
     
             .Sort.SortFields.Clear
             .Sort.SortFields.Add Key:=AireColonneATrier, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
             With .Sort
                  .SetRange AireATrier
                  .Header = xlYes
                  .MatchCase = False
                  .Orientation = xlTopToBottom
                  .SortMethod = xlPinYin
                  .Apply
             End With
     
             AireColonneATrier.Clear
     
             Set AireColonneATrier = Nothing
             Set AireATrier = Nothing
     
        End With
     
        Application.ScreenUpdating = True
     
    End Sub

  3. #3
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut
    Bonjour Eric et merci pour cette réponse qui fonctionne. (petit pouce en l'air en prime)

    Mais mon but était de supprimer cette colonne C intermédiaire, pas d'en créer une même temporaire.
    Merci du coup de main en tout cas.

    Curt

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Curt,

    Je n'ai pas bien compris le besoin. Trier sur le premier caractère de A ne revient-t-t-il pas à trier sur A? Ne peux-tu donc pas trier sur B-A directement?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut Pierre,

    Pour info :
    Pièce jointe 498435

    Philippe reconnaîtra son générateur de noms et de dates qui sert toujours....

  6. #6
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut
    Bonjour à tous et merci de vos réponses.

    je vais expliciter le sujet :
    J'ai une liste de documents qu'on triée à partir des indices (a, b, c, etc...)
    Sans rien changer à cette liste existante, il est demandé de pouvoir "indicer" les indices à savoir de pouvoir traiter (et dans cet ordre) a b1 b2 b3 b c d e1 e2 e3 e
    Pour être encore plus clair il existe des indices internes appelés OUVERT (diffusion sous-traitants, chantier) qui ouvrent (comme le nom l'indique) une nouvelle diffusion. Il peut y avoir n indices numériques avant que la diffusion officielle soit faite.

    Revenons à ma question et au sujet de ce post :
    Je ne peux pas ajouter de colonne (pas même temporaire)
    Si j'utilise le tri sur la colonne INDICE, je me retrouve avec c, c1,c10,c11,c12..... c2, c20 - ce qui ne correspond pas à la réalité.

    Je regarde en ce moment à trier sur les dates mais ça ne me semble pas judicieux puisque le nombre sous-traitants, chantier etc n'est jamais connu d'une affaire à l'autre.

    Merci d'avance pour le coup de main.
    Curt

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par curt Voir le message
    Si je comprends bien, il ne faut toucher à rien dans le tableau mais être en mesure de faire un tri.
    Par rapport à mon code, il suffit de charger les valeurs de ma colonne temporaire dans une matrice qui doit contenir également la ligne d'origine du tableau et de trier la matrice.

  8. #8
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut
    Eric, je penses tu as parfaitement compris le problème.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je serais tout de même bien curieux de voir en quoi gêne de mettre une colonne temporaire à droite et de la supprimer après, ceci dit...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut
    Bonsoir Laurent et Pierre,

    @laurent : merci pour la démarche tant technique que pédagogique - De plus, mettre un lien vers ta signature et les infos est de toute façon un plus (je vais y regarder de très près)

    @pierre : effectivement, je suis d'abord partie sur cette solution facile et efficace (et qui fonctionne actuellement) en masquant la colonne concernée. Mais comme tout ce que l'on veut cacher fini un jour par être découvert, je souhaitai faire le tri sans passer par cette colonne temporaire (on ne détruit pas ce qui n'existe pas)

    @ tous : merci à tous les intervenants pour leur aide - je vais regarder les liens proposés et si besoin, je repasserai vous voir.

    Curt

  11. #11
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonsoir, je vais peut-être dire pleins de bêtises?
    En ce qui me concerne, j'utiliserais une extraction totale de ma base de données par filtre élaboré sur une autre feuille. Ainsi je pourrais travailler sur ma base de données bis sans la moindre altération de la base de départ.
    Cela me permettrais d'effectuer des tri séquentiels en toute sécurité de manière à obtenir un tri très complexe. Car le problème des tri/tri successif est le retour a l'original
    Enfin moi ce que j'en dit ??? Je ne détiens pas de vérité.
    Cordialement

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par curt Voir le message
    [...]

    @pierre : effectivement, je suis d'abord partie sur cette solution facile et efficace (et qui fonctionne actuellement) en masquant la colonne concernée. Mais comme tout ce que l'on veut cacher fini un jour par être découvert, je souhaitai faire le tri sans passer par cette colonne temporaire (on ne détruit pas ce qui n'existe pas)[...]
    Tu la crées juste le temps de traiter les données, puis tu la supprimes. C'est juste une colonne temporaire, créée pour le temps du traitement...

    Cela dit, la solution de Transitoire est très intéressante aussi. Lorsque je dois traiter ce genre de cas, je travaille toujours sur une copie de la source, ce qui me donne entière liberté pour les traitements...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [XL-2010] Fonction Rang en vba
    Par kingjon dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 17/06/2016, 09h09
  2. Objet Range en VBA
    Par Mopige dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/04/2014, 10h37
  3. comment associe t-on du code VBA à un bouton dans un userform
    Par AlexFred dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/06/2010, 14h52
  4. [VBA-E]type de donnée range en vba utilisée dans une feuille
    Par Yoyo51 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/03/2006, 10h26
  5. [VBA-E] demande à l'utilisateur de sélectionner un range en VBA
    Par pascal123 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/01/2004, 12h47

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