Toutes les combinaisons possibles

Windfly

XLDnaute Nouveau
Bonjour le forum,

Est ce que qq'un connait une astuce pour réaliser la chose suivante :

Dans ma colonne A, j'ai une serie de villes (que j'appellerai A, B, C, D etc...) et dans ma colonne B une autre série de villes (1, 2, 3, 4 etc).

Je souhaite, dans ma colonne C réaliser toutes les combinaisons possibles entre les 2 premières colonnes (exemple A1, A2, A3, B1, B2, etc...)

Merci d'avance pour votre aide.

Cordialement

Windfly
 

pijaku

XLDnaute Occasionnel
Re : Toutes les combinaisons possibles

Bonsoir,

Une solution par VBA.
Pour la placer dans votre classeur :
depuis votre feuille de calcul, tapez ALT+F11
Insertion/Module
Dans ce module copiez collez ce code :
Code:
Function WindflyCombinaisons(Plage1 As Range, Plage2 As Range, Indic As Long)
Dim Tabl(), Tabl2(), Plag1 As Range, Plag2 As Range, i As Long, j As Long, k As Long, T_Out()
Set Plag1 = Range(Plage1.Address)
Set Plag2 = Range(Plage2.Address)
Tabl = Plag1
Tabl2 = Plag2
For i = LBound(Tabl) To UBound(Tabl)
    For j = LBound(Tabl2) To UBound(Tabl2)
        ReDim Preserve T_Out(k)
        T_Out(k) = Tabl(i, 1) & Tabl2(j, 1)
        k = k + 1
    Next
Next
WindflyCombinaisons = T_Out(Indic)
End Function
fermez la fenêtre Visual Basic Editor

Dans la première cellule colonne C, saisir la formule :
=WindflyCombinaisons($A$1:$A$4;$B$1:$B$4;LIGNE()-1)
et étirer vers le bas jusqu'à ce que votre formule affiche #VALEUR!
 

ROGER2327

XLDnaute Barbatruc
Re : Toutes les combinaisons possibles

Bonjour à tous

Solution par formule.
Code:
=SI(NBVAL($A$1:$A$30)*NBVAL($B$1:$B$30)<LIGNE(1:1);"";
DECALER(A$1;ENT((LIGNE(1:1)-1)/(NBVAL($B$1:$B$30)));)&" - "&
DECALER(B$1;MOD(LIGNE(1:1)-1;NBVAL($B$1:$B$30));))
À saisir en C1, et recopier vers le bas.​


ROGER2327
#6207


Vendredi 20 Tatane 139 (Saint Tiberge, frère quêteur - fête Suprême Quarte)
15 Thermidor An CCXX, 6,3927h - brebis
2012-W31-4T15:20:33Z
 

Windfly

XLDnaute Nouveau
Re : Toutes les combinaisons possibles

Bonjour Pijaku, bonjour Roger,

Je vous remercie pour vos réponses, mais malheureusement, aucune des deux ne fonctionne.

Pour la solution VBA, j'ai comme résultat "#Value!" dès la 1er case.
Pour la solution avec formule, j'ai comme résultat "#Name?".

Avez vous une idée pour résoudre le problème?

Merci encore d'avance

Windfly
 

ROGER2327

XLDnaute Barbatruc
Re : Toutes les combinaisons possibles

Bonjour Windfly


(...)
Pour la solution avec formule, j'ai comme résultat "#Name?".
(...)
Sûrement pas.​


ROGER2327
#6209


Samedi 21 Tatane 139 (Saints Catoblepas, lord et Anoblepas, amirals - fête Suprême Quarte)
16 Thermidor An CCXX, 3,4919h - guimauve
2012-W31-5T08:22:50Z
 

Pièces jointes

  • Windfly.xlsx
    8.8 KB · Affichages: 663

Windfly

XLDnaute Nouveau
Re : Toutes les combinaisons possibles

Re bonjour Roger,

Si, j'avais bien "#Name!" comme résultat, mais grace à ton fichier j'ai compris pourquoi.

Ma version d'Excel est en anglais, il fallait donc que je traduise ta formule aussi, et effectivememt ca marche!

Merci encore

Windfly
 

ROGER2327

XLDnaute Barbatruc
Re : Toutes les combinaisons possibles

Re...


(...)

Ma version d'Excel est en anglais, il fallait donc que je traduise ta formule aussi, et effectivememt ca marche!

(...)
Vu comme ça, d'accord. Je n'ai rien dit !​


Bonne journée.


ROGER2327
#6210


Samedi 21 Tatane 139 (Saints Catoblepas, lord et Anoblepas, amirals - fête Suprême Quarte)
16 Thermidor An CCXX, 4,2703h - guimauve
2012-W31-5T10:14:55Z
 

Berni

XLDnaute Nouveau
Bonjour à tous,
J ai une question. J ai dans la colonne A ligne 1 la date du jour.
Sur la ligne 3 un nombre jours.
Et dans la ligne 5 un autre nombre de jours.
Et j aimerai soustraire c est 2 chiffres à une date précise.
Comment faire.
Merci par avance de vos réponse.
 

job75

XLDnaute Barbatruc
Bonjour Geogeo4207, bienvenue sur XLD,

Voyez le fichier joint et cette macro :
VB:
Sub Combinaisons()
Dim sep$, tablo, ub&, i&, j&, k&, n&
sep = " " 'séparateur à adapter
tablo = [A1].CurrentRegion.Resize(, 3) 'matrice, plus rapide
ub = UBound(tablo)
ReDim resu(1 To (ub - 1) ^ 3, 1 To 1)
For i = 2 To ub
    If tablo(i, 1) <> "" Then
        For j = 2 To ub
            If tablo(j, 2) <> "" Then
                For k = 2 To ub
                    If tablo(k, 3) <> "" Then
                        n = n + 1
                        resu(n, 1) = tablo(i, 1) & sep & tablo(j, 2) & sep & tablo(k, 3)
                    End If
                Next
            End If
        Next j
    End If
Next i
'---restitution---
With ActiveSheet
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[E2] '1ère cellule de restitution, à adapter
        If n Then .Resize(n) = resu
        .Offset(n).Resize(.Parent.Rows.Count - n - .Row + 1).ClearContents 'RAZ en dessous
    End With
End With
End Sub
A+
 

Pièces jointes

  • Combinaisons(1).xlsm
    18.6 KB · Affichages: 41

Geogeo4207

XLDnaute Nouveau
Bonjour Job, et merci pour ta grande réactivité :)
Et comment faire pour que la feuille détecte sur combien de colonnes le calcul doit se faire ?
Mon but est de faire le calcul jusqu'à 10 voir 20 colonnes, mais elles ne seront pas toujours remplies. Or avec ta formule, si une colonne est vide le calcul ne se fait point.
J'en demande beaucoup désolé
Je vous remercie.
 

Geogeo4207

XLDnaute Nouveau
Oui j'ai réussi à enlever ou ajouter des colonnes dans le calculs, votre macro est en effet simple d'utilisation même pour un novice comme moi.
Quel paramètre je peux rentrer pour que le calcul ne se lance que pour les colonnes non vides ?
En effet je serais vite bloqué par les limitations d'excel...
 

Discussions similaires

Réponses
10
Affichages
301
Réponses
8
Affichages
462

Statistiques des forums

Discussions
312 839
Messages
2 092 688
Membres
105 509
dernier inscrit
hamidvba