Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA [Ajout de feuilles variant selon le nombre de combinaisons.]

arnaud95

XLDnaute Nouveau
Bonjour à tous.En fait j'ai trouvé sur internet une macro qui trouve l'ensemble des combinaisons, moi perso je suis débutant en VBA et je n'y connais pas grand chose. Le problème que j'ai c'est qu'à partir d'un moment le nombre de combinaisons devient trop élevé pour etre affiché sur une page et donc je n'ai que les resultats partiels. Ce que je souhaiterai c'est qu'excel ajoute une nouvelle feuille à chaque fois que la precedente est terminée et finalement que je puisse avoir tous les resultats sur l'enemble des feuilles.
Ma macro est la suivante.
Je vous mets la macro en pièce jointe si vous souhaitez la tester et je la mets également ci dessous.

'Dans l'onglet combinaisons.
'1. En A1, écrire c ou p ; (Combinaison ou Permutation)
'2. En A2, écrire la valeur de p ;(p tirés parmi N)
'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.



Merci beaucoup de votre aide.
 

Pièces jointes

  • TEST COMBI.xls
    36.5 KB · Affichages: 83

Gael

XLDnaute Barbatruc
Re : VBA [Ajout de feuilles variant selon le nombre de combinaisons.]

Bonjour Arnaud,

C'est une procédure que je recommande souvent pour l'avoir déjà utilisé et qui fonctionne très bien.

La procédure change déjà de colonne ce qui te permet d'obtenir tout de même la bagatelle de 65536 lignes *256 colonnes soit 16.700.416 combinaisons différentes et le temps de traitement est assez long de même que la mémoire utilisée.

Si cependant tu souhaites aller plus loin, c'est très simple, il suffit de modifier légèrement le code en remplaçant la ligne suivante:

Code:
If ColNum > 256 Then Exit Sub

par les lignes suivantes:

Code:
If ColNum > 256 Then
        Set Results = Worksheets.Add
        ColNum = 1
        End If

@+

Gael
 

arnaud95

XLDnaute Nouveau
Re : VBA [Ajout de feuilles variant selon le nombre de combinaisons.]

Merci gael, le problème c'est que les résultats sont déjà en colonne, c 'est a dire que si je veux les combinaisons de 3 élément parmi N, j'aurai les colonnes A, B, C remplies ect...de plus j'utiliserai par la suite des vlook up ect...c'est pour çà que je souhaite ajouter des feuilles...
 

Gael

XLDnaute Barbatruc
Re : VBA [Ajout de feuilles variant selon le nombre de combinaisons.]

Bonjour Arnaud,

Je n'ai pas compris exactement ce que tu souhaites mais tu trouveras ci-dessous quelques pistes pour modifier la rocédure et obtenir de remplir exactement les cellules souhaitées:

1 - Tu peux imposer un nombre de colonnes max par feuille en remplacant Rows.count par la valeur désirée:

Code:
If (RowNum + BufferPtr - 1) > 3 Then

2 - Tu peux imposer un nombre de lignes par colonne en changeant les 2 éléments suivants:

Code:
Const BufferSize As Long = 50
Code:
If (RowNum + BufferPtr - 1) > 50 Then

3 - Tu peux choisir la ligne et la colonne de début par exemple pour démarrer en ligne 5 colonne 5:

Code:
  If RowNum = 0 Then RowNum = 5
  If ColNum = 0 Then ColNum = 5
  If FlushBuffer = True Or BufferPtr = UBound(Buffer()) Then
    If BufferPtr > 0 Then
      If (RowNum + BufferPtr - 1) > 55 Then '(Taille buffer + N° de ligne)
        RowNum = 5
        ColNum = ColNum + 1
        If ColNum > 6 Then
        Set Results = Worksheets.Add
        ColNum = 5
        End If
      End If

Pour ma réponse précédente, si tu veux dépasser la limite de 16.777.216 il faut également enlever le test en début de procédure:
Code:
If N > Cells.Count Then GoTo DataError

mais je ne suis pas sûr des conséquences.

Essaye avec ces modifications et n'hésite pas à relancer le problème si tu n'arrives pas à obtenir le résultat souhaité.

@+

Gael
 

Discussions similaires

Réponses
5
Affichages
246
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…