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 :

Trier un tableau , avec données appairées sur colonnes contigues


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 46
    Par défaut Trier un tableau , avec données appairées sur colonnes contigues
    bonjour à tous,
    je récupère un tableau avec des données appairées sur des colonnes contiguës, voir copie d'écran.
    j'ai un nombre d'inscrit(s) et le nom des participants avec dans la colonne suivante le choix effectué(4 choix possibles)
    je tri et je génère une liste des plats à fournir.
    Pièce jointe 518259
    ça fonctionne mais je voudrais optimiser le code créé.
    je regroupe dans une plage les portions de colonnes par deux, puis je tri et je sort la liste à fournir...
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Public Sub TriRep()
    Sheets("pla-Des").Select
        Range("Tableau3[[Participant_1]:[Choix_1]]").Select
        Selection.Copy
        Range("N9").Select
        ActiveSheet.Paste
     
        Range("Tableau3[[Participant_2]:[Choix_2]]").Select
        Selection.Copy
        Range("N80").Select
        ActiveSheet.Paste
     
        Range("Tableau3[[Participant_3]:[Choix_3]]").Select
        Selection.Copy
        Range("N150").Select
        ActiveSheet.Paste
     
        Range("Tableau3[[Participant_4]:[Choix_4]]").Select
        Selection.Copy
        Range("N220").Select
        ActiveSheet.Paste
     
        Call Tri_liste
        Call separ_choix
        Sheets("Annulations").Select
        Range("A9").Select
    End Sub
     
    Private Sub Tri_liste()
        M = 9
        Range("N8:O300").Select
        Application.CutCopyMode = False
        ActiveWorkbook.Worksheets("Pla-Des").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Pla-Des").Sort.SortFields.Add2 Key:=Range("N8"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Pla-Des").Sort
            .SetRange Range("N9:O300")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
    End Sub
     
    Private Sub separ_choix()
    Dim CptrPla1 As Integer
    Dim CptrPla2 As Integer
    Dim CptrDes1 As Integer
    Dim CptrDes2 As Integer
    Dim Mavar2 As String
    M = 9
    Range("O" & M).Select
    While ActiveCell.Value <> ""
         Select Case Left(ActiveCell.Value, 1)
            Case Is = "1"
                 CptrPla1 = CptrPla1 + 1
                 CptrDes1 = CptrDes1 + 1
            Case Is = "2"
                 CptrPla1 = CptrPla1 + 1
                 CptrDes2 = CptrDes2 + 1
            Case Is = "3"
                 CptrPla2 = CptrPla2 + 1
                 CptrDes1 = CptrDes1 + 1
            Case Is = "4"
                 CptrPla2 = CptrPla2 + 1
                 CptrDes2 = CptrDes2 + 1
         End Select
         M = M + 1
         Range("O" & M).Select
    Wend
         Range("L3") = CptrPla1
         Range("l4") = CptrPla2
         Range("L5") = CptrDes1
         Range("L6") = CptrDes2
     Range("B9").Select
    End Sub
    pouvez-vous m'aider à rendre ce code plus efficace?
    MERCI d'avance
    Lam83

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Pas besoin de code.

    Il faut que tu transformes tes données sources : au lieu d'avoir une seule ligne par événement, il faut une seule ligne par participant.
    Donc une seule colonne Participant et une seule colonne Choix (le colonne du nombre d'inscrits devient inutile), le code de l'évènement assurant le lien entre les lignes.

    Tu peux ensuite en tirer deux tableaux croisés dynamiques.
    Le premier mettra en forme tes données et te calculera (entre autre) le nombre d'inscrits par événement.
    Le second te permettra de faire un bilan des "choix".

    Cerise sur le gâteau, tu pourras utiliser efficacement le filtre que tu as placé sur tes données, par exemple pour te renseigner sur les choix successifs de telle personne ou trier suivant les choix pour faciliter leur distribution.

    J'ai aussi l'impression que tu fais un fichier par journée (ou groupe d'événement).
    Rien ne t'empêcherai de rajouter une colonne pour codifier ce "groupe" et ainsi faire un suivi sur l'ensemble des choix passés.
    Quand les données sont bien structurée, la seule limite de ce qu'on peut en faire, c'est l'imagination.

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 566
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 566
    Par défaut
    Bonjour à tous

    Sinon décroiser la source avec PowerQuery intégré à 2019.

    Tu pourras ensuite très facilement exploiter, avec ou sans VBA

  4. #4
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 46
    Par défaut Trier un tableau , avec données appairées sur colonnes contigues
    bonsoir,
    je vous remercie pour vos solutions, mais j'ai petit problème pour organiser mon tableau.
    j'ai dis que je récupérais un tableau..; je précise : du net, de formulaires Googleform, donc tableau immuable.
    de plus je ne suis pas l'utilisateur, la personne qui exécute, sait copier le fichier sur son modèle Excel et à l'aide d'une macro doit avoir le résultat.
    inutile de lui demander plus.
    la 1ere partie de mon code crée effectivement deux colonnes : participant, choix.
    la 2nde tri pour supprimer les trous
    la 3eme fait le travail d'un TCD.

    je voulais trouver une écriture plus limpide et plus dépouillée ou plus globale pour éviter plusieurs sub.
    Merci de me dire si je rêve ou si c'est possible.
    cordialement
    Lam83

  5. #5
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 566
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 566
    Par défaut
    RE

    Justement PowerQuery par une requête décroise ton tableau immuable

    Les objets PowerQuery existent dans si tu tiens à piloter par VBA

Discussions similaires

  1. Créer un tableau avec access comme sur les pages web
    Par celiaaa dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/06/2007, 22h53
  2. Réponses: 5
    Dernier message: 30/03/2007, 11h59
  3. [Conception] Tableau avec données SGBD
    Par mealtone dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 07/09/2006, 17h25
  4. [VBA Excel] Tableau avec données du userform et de formules
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/06/2006, 13h29
  5. tableau avec un border sur le contour
    Par dietrich dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/03/2006, 11h05

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