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 :

combinaisons multiples fichier excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut combinaisons multiples fichier excel
    salut le phorum

    j'ai de nouveau une requête qui m'est demandé sur le traitement d'un fichier
    je vous explique
    j'ai une table représentant divers éléments (voir ci dessous)

    Nom : 2018-12-05_16-02-31.jpg
Affichages : 791
Taille : 247,5 Ko

    j'aimerai une macro qui me permettrait de me donner toutes les combinaisons possibles de cette liste (colonne A du tableau)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    01 A, 01 B, 02 B
    ...
    01 A, 01 B, 02 B, 03 B, 04CD, 04CL, 05CD, 05CL, 06CD, 06CL
    01 A, 01 B, 02 B, 03 B, 04CD, 04CL, 05CD, 05CL, 06CD, 52
    01 A, 01 B, 02 B, 03 B, 04CD, 04CL, 05CD, 05CL, 06CD, 61 A
    ...
    01 A, 01 B, 02 B, 03 B, 04CD, 04CL, 05CD, 05CL, 62 B, 64CL
    01 A, 01 B, 02 B, 03 B, 04CD, 04CL, 05CD, 05CL, 62 B, 65CD
    01 A, 01 B, 02 B, 03 B, 04CD, 04CL, 05CD, 05CL, 62 B, 65CL
    j'ai bien trouvé une macro qui me génére les combinaisons mais pas les cas ou l'item est seul ou 2 ou 3
    il me mets toutes les combinaisons comprenant l'intégralité des items

    j'espère avoir été clair....

    merci pour vos pistes ou solutions

    david

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 683
    Par défaut
    Citation Envoyé par munity Voir le message
    j'aimerai une macro qui me permettrait de me donner toutes les combinaisons possibles de cette liste (colonne A du tableau)
    ...

    j'ai bien trouvé une macro qui me génére les combinaisons mais pas les cas ou l'item est seul ou 2 ou 3
    il me mets toutes les combinaisons comprenant l'intégralité des items
    Salut,

    si ta fonction arrive à sortir la liste des combinaison, peux tu faire en sorte qu'elle se limite à un, deux,... n éléments en sorties ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    salut jean philippe

    non malheureusement, il faut dire que j'ai juste fait un copier coller sans vraiment comprendre comment fonction la macro
    cela me paraissait bon mais après analyse je me suis rendu compte qu'il me manquant les éléments à 1, 2,3 jusque 6
    sachant que j'ai 10 items au total
    et mon autre souci c'est que j'ai plus d'un million de ligne ce qui est bon dans xl 2007 mais bon le fichier est très lourd et compliqué à manipuler......
    voici le code
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
     
     
      '1. En A1, écrire c ou p ; (Combinaison ou Permutation)
      '2. En A2, écrire la valeur de R ;
      '3. Sous A2, écrire la liste des N éléments ;
      '4. Sélectionner A1 et activer la procédure.
     
    'Exemple:
    'A1 c
    'A2 3
    'A3 1
    'A4 2
    'A5 Excel
    'A6 4
    'A7 *
    'A8 6
    '
    'La procédure donne alors la liste de toutes les combinaisons
    'possibles de 3 éléments choisis parmi 6.
     
     
    Option Explicit
     
    Dim vAllItems As Variant
    Dim Buffer() As String
    Dim BufferPtr As Long
    Dim Results As Worksheet
     
                                  'procédure1
     
     
     
    Sub ListPermutations()
    Worksheets("combinaisons").Select
    Range("A1").Select
      Dim Rng As Range
      Dim PopSize As Integer
      Dim SetSize As Integer
      Dim Which As String
      Dim N As Double
      Dim message As Integer
      Dim nom As String
      Dim sh As Worksheet, trouvé As Boolean
      trouvé = False
     
      message = InputBox("nombre d'actifs?", "Combinaison des actifs", 3)
      Range("A2") = message
      Const BufferSize As Long = 4096
     
      Set Rng = Selection.Columns(1).Cells
      If Rng.Cells.Count = 1 Then
        Set Rng = Range(Rng, Rng.End(xlDown))
      End If
     
      PopSize = Rng.Cells.Count - 2
      If PopSize < 2 Then GoTo DataError
     
      SetSize = Rng.Cells(2).Value
      If SetSize > PopSize Then GoTo DataError
     
      Which = UCase$(Rng.Cells(1).Value)
      Select Case Which
      Case "C"
        N = Application.WorksheetFunction.Combin(PopSize, SetSize)
      Case "P"
        N = Application.WorksheetFunction.Permut(PopSize, SetSize)
      Case Else
        GoTo DataError
      End Select
      If N > Cells.Count Then GoTo DataError
     
      Application.ScreenUpdating = False
     
     
     
      nom = "résultats"
      Set Results = Worksheets.Add
      Sheets("Feuil1").Name = "résultats"
     
      vAllItems = Rng.Offset(2, 0).Resize(PopSize).Value
      ReDim Buffer(1 To BufferSize) As String
      BufferPtr = 0
     
      If Which = "C" Then
        AddCombination PopSize, SetSize
      Else
        AddPermutation PopSize, SetSize
      End If
      vAllItems = 0
     
      Application.ScreenUpdating = True
      Exit Sub
     
    DataError:
      If N = 0 Then
        Which = "Enter your data in a vertical range of at least 4 cells. " _
          & String$(2, 10) _
          & "Top cell must contain the letter C or P, 2nd cell is the number" _
          & "of items in a subset, the cells below are the values from which" _
          & "the subset is to be chosen."
      Else
        Which = "This requires " & Format$(N, "#,##0") & _
          " cells, more than are available on the worksheet!"
      End If
      MsgBox Which, vbOKOnly, "DATA ERROR"
      Exit Sub
    End Sub
     
    Private Sub AddPermutation(Optional PopSize As Integer = 0, _
      Optional SetSize As Integer = 0, _
      Optional NextMember As Integer = 0)
     
      Static iPopSize As Integer
      Static iSetSize As Integer
      Static SetMembers() As Integer
      Static Used() As Integer
      Dim i As Integer
     
      If PopSize <> 0 Then
        iPopSize = PopSize
        iSetSize = SetSize
        ReDim SetMembers(1 To iSetSize) As Integer
        ReDim Used(1 To iPopSize) As Integer
        NextMember = 1
      End If
     
      For i = 1 To iPopSize
        If Used(i) = 0 Then
          SetMembers(NextMember) = i
          If NextMember <> iSetSize Then
            Used(i) = True
            AddPermutation , , NextMember + 1
            Used(i) = False
          Else
            SavePermutation SetMembers()
          End If
        End If
      Next i
     
      If NextMember = 1 Then
        SavePermutation SetMembers(), True
        Erase SetMembers
        Erase Used
      End If
     
    End Sub  'AddPermutation
     
    Private Sub AddCombination(Optional PopSize As Integer = 0, _
      Optional SetSize As Integer = 0, _
      Optional NextMember As Integer = 0, _
      Optional NextItem As Integer = 0)
     
      Static iPopSize As Integer
      Static iSetSize As Integer
      Static SetMembers() As Integer
      Dim i As Integer
     
      If PopSize <> 0 Then
        iPopSize = PopSize
        iSetSize = SetSize
        ReDim SetMembers(1 To iSetSize) As Integer
        NextMember = 1
        NextItem = 1
      End If
     
      For i = NextItem To iPopSize
        SetMembers(NextMember) = i
        If NextMember <> iSetSize Then
          AddCombination , , NextMember + 1, i + 1
        Else
          SavePermutation SetMembers()
        End If
      Next i
     
      If NextMember = 1 Then
        SavePermutation SetMembers(), True
        Erase SetMembers
      End If
     
    End Sub  'AddCombination
     
    Private Sub SavePermutation(ItemsChosen() As Integer, _
      Optional FlushBuffer As Boolean = False)
     
      Dim i As Integer, sValue As String
      Dim j As Integer
      Dim message As Integer
     
      Static RowNum As Long, ColNum As Long
     
      If RowNum = 0 Then RowNum = 1
      If ColNum = 0 Then ColNum = 1
     
      If FlushBuffer = True Or BufferPtr = UBound(Buffer()) Then
        If BufferPtr > 0 Then
          If (RowNum + BufferPtr - 1) > Rows.Count Then
            RowNum = 1
            ColNum = ColNum + 1
            If ColNum > 256 Then Exit Sub
          End If
     
          Results.Cells(RowNum, ColNum).Resize(BufferPtr, 1).Value _
            = Application.WorksheetFunction.Transpose(Buffer())
          RowNum = RowNum + BufferPtr
        End If
     
        BufferPtr = 0
        If FlushBuffer = True Then
          Erase Buffer
          RowNum = 0
          ColNum = 0
          Exit Sub
        Else
          ReDim Buffer(1 To UBound(Buffer))
        End If
     
      End If
      'construct the next set
      For i = 1 To UBound(ItemsChosen)
      j = 1
      sValue = sValue & ", " & vAllItems(ItemsChosen(i), 1)
      'and save it in the buffer
      Next i
      BufferPtr = BufferPtr + 1
      Buffer(BufferPtr) = Mid$(sValue, 3)
      End Sub
    je l'ai récupéré sur ce post
    https://www.developpez.net/forums/d3...epetition-vba/

    si tu y comprends quelque chose qui pourrait me permettre de la modifier comme je le souhaites.....

    ca serait cool

    david

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 683
    Par défaut
    Salut,

    comme la quantité de permutations possibles est ridiculement élevée, je pose la question de la pertinence de ton besoin

    Que comptes tu faire en sortie de cette liste exhaustive des combinaisons ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    Salut Jean Philippe

    bon je vais essayer de résumer mon besoin
    j'ai ouvert un post afin de réduire le nombre de possibilité car au final j'ai appris que toutes les valeurs ne sont pas nécessaires et donc que certaines sont à exclure
    de ce coté tout est réglé (ci dessous le post)
    https://www.developpez.net/forums/d1...ne-x-criteres/

    le ménage étant fait, j’obtiens donc une colonne concaténée uniquement avec les valeurs susceptibles de me retourner le résultat
    donc voici le tableau récapitulatif avec une liste de cas et les valeurs à indiquer suivant la combinaison
    Nom : BASE DE CALCUL.JPG
Affichages : 664
Taille : 143,1 Ko

    et au final, le résultat souhaité
    Nom : RESULTAT.JPG
Affichages : 599
Taille : 45,2 Ko

    donc mon idée était de concaténer les colonnes REV1 A REV10 en excluant les données inutiles (cette opération est faite)
    puis de faire un recherchev sur l'ensemble des combinaisons possibles afin de récupérer ma valeur texte
    voilà mon besoin Jean Philippe
    alors est ce possible selon toi dans excel, ma méthode est elle judicieuse ?
    ou alors il faut que je travaille autrement ?
    parce je me rends compte que je vais devoir renseigner manuellement le texte correspondant au différentes combinaisons et ca parait également être ridiculement chronophage et source d'erreur

    en résumé donc je suis un peu perdu et un peu voire beaucoup de conseil me serait fort utile

    merci d'avance à tous

    david

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 683
    Par défaut
    Question à 10 sous : tu peux passer sous Access plutôt que d'essayer de faire ca sous Excel ?

    Tu vas méchamment galérer, car ta recherche textuelle se fera par morceau, vu que tu n'as meme pas de tri par ordre alphabétique pour l'instant...
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/02/2018, 09h08
  2. convertir multiples fichiers Excel en CSV à l 'aide d'un VB script
    Par christactua dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/10/2017, 09h26
  3. Réponses: 1
    Dernier message: 19/10/2016, 14h09
  4. Reconstruction d'une base de données depuis multiples fichiers Excel
    Par ryosakasaki7777 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 27/01/2014, 23h22
  5. [SSIS] Data loading depuis multiples fichiers Excel et worksheets
    Par finarfin95 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/09/2007, 12h00

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