Existe-t-il une fonction permettant d'empiler deux matrices?

pruvieros

XLDnaute Nouveau
J'ai deux matrices:
une dans les cellules A1 et A2 comportant les valeurs 55 et 66
une autre dans les cellules C1 et C2 comportant les valeurs 77 et 88

J'aimerais savoir s'il existe une fonction permettant d'obtenir une matrice en E1:E4 effectuant l'empilement de ces deux matrices, c'est-à-dire les valeurs 55,66,77,88.

L'idéal serait que je puisse entrer en E1:E4 quelque chose du genre {=empilement(A1:A2;C1:C2)}

Si possible, j'aimerais ne pas passer par un tableau créé en vba, et me limiter aux fonctions Excel

Merci pour vos lumières...

Pruvieros
 

Pièces jointes

  • empilement de matrices.xlsx
    8.9 KB · Affichages: 31

R@chid

XLDnaute Barbatruc
Re : Existe-t-il une fonction permettant d'empiler deux matrices?

Bonsoir,
c'est pas clair manques des exemples et des explications, à tout hasard,
en E1 :
Code:
=PETITE.VALEUR(A$1:C$2;LIGNE())

ou :
Code:
=SI(LIGNE()>NB(A:C);"";DECALER(A$1;MOD(LIGNE()-1;NB(A:A));(NB(A:A)<LIGNE())*2))

@ tirer vers le bas





@ + +
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Existe-t-il une fonction permettant d'empiler deux matrices?

Bonjour,

Pour alpha-Numérique

=SI(LIGNE()-1<=NBVAL(Liste1);INDEX(Liste1;LIGNE()-1);INDEX(Liste2;LIGNE()-1-NBVAL(Liste1)))

JB
 

Pièces jointes

  • empilement de matrices-1.xlsx
    9.8 KB · Affichages: 35

pruvieros

XLDnaute Nouveau
Re : Existe-t-il une fonction permettant d'empiler deux matrices?

Merci beaucoup pour vos réponses.
Je réalise que j'ai mal posé ma question.

J'ai deux matrices A et B de dimensions identiques:1 colonne et 50 lignes chacune.

Je souhaite construire grâce à une fonction une troisième matrice C, résultant de l'empilement des matrices A et B.
Cette matrice C a donc pour dimension 1 colonne et 100 lignes.

Je ne souhaite pas faire apparaître cette matrice C; mon objectif final est d'utiliser une fonction statistique dont cette matrice C serait un argument. (Il s'agit de la fonction DROITEREG pour des calculs de régression linéaire)

Ainsi, si je disposais d'une fonction d'empilement qui me permettait par exemple d'écrire DROITEREG(EMPILEMENT(A;B)) ou DROITEREG(A.B), cela m'éviterait de créer ma matrice C dans les cellules de mon classeur.

Ce que je cherche est donc une fonction qui accepte en argument des matrices, et qui fournit en sortie une matrice.
Excel gère très facilement, via des fonctions matricielles, les besoins d'addition de matrices (A+B), de multiplication (A*B), ou de concaténation(A&B) mais je ne trouve pas la fonction matricielle d'empilement...

Cela m'arrangerait car j'ai des centaines de matrices A et B dans mon classeur, et j'aimerais éviter de créer un nouvel onglet pour les matrices C (empilement des A et B).

En espérant que cette fois-ci j'ai été plus clair,
Merci encore pour vos lumières.

Pruvieros
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Existe-t-il une fonction permettant d'empiler deux matrices?

Bonjour pruvieros, R@chid, JB,

Si vous ne voulez pas utiliser VBA il est impératif de passer par une plage auxiliaire de cellules pour empiler les matrices.

En VBA voyez cette fonction qui renvoie un vecteur ligne :

Code:
Function empilement(matA, matB)
Dim a(), e, n&
matA = matA: matB = matB
ReDim a(1 To UBound(matA) + UBound(matB))
For Each e In matA
  n = n + 1
  a(n) = e
Next
For Each e In matB
  n = n + 1
  a(n) = e
Next
empilement = a 'vecteur ligne
End Function
Voyez son utilisation sur la plage E1:E4 (validation matricielle) avec TRANSPOSE.

Fichier joint.

A+
 

Pièces jointes

  • empilement de matrices(1).xlsm
    15.6 KB · Affichages: 28

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Existe-t-il une fonction permettant d'empiler deux matrices?

Voir PJ

1-La fonction peut être utilisée comme fonction matricielle dans le tableur

-sélectionner D2:D9
=empilement(A2:A5;B2:B5)
Valider avec maj+ctrl+entrée

2- On peut lui donner des tableaux ou des champs en paramètre
3- On peut emboiter les fonctions Empilement()


e= Empilement(Empilement(a, b), a)

Code:
Sub Essai()
   a = [a2:A5]
   b = [b2:b5]
   c = Empilement(Range("a2:A5"), Range("b2:b5"))
   [K2:K9] = c
   e = Empilement(Empilement(a, b), a)
   [N2:N13] = e
End Sub

Function Empilement(Tab1, Tab2)
   Dim c()
   On Error Resume Next
   tmp = Application.Caller.Rows.Count
   If Err = 0 Then
     ReDim c(1 To Application.Caller.Rows.Count)
   Else
      ReDim c(1 To UBound(Tab1) + UBound(Tab2))
      If Err > 0 Then ReDim c(1 To Tab1.Count + Tab2.Count)
   End If
   On Error GoTo 0
   For Each k In Tab1: i = i + 1: c(i) = k: Next
   For Each k In Tab2: i = i + 1: c(i) = k: Next
   Empilement = Application.Transpose(c)
End Function

http://boisgontierjacques.free.fr/fichiers/Cellules/FusionTableaux.xls

JB
 

Pièces jointes

  • EmpilementTables.xls
    54 KB · Affichages: 21
Dernière édition:

job75

XLDnaute Barbatruc
Re : Existe-t-il une fonction permettant d'empiler deux matrices?

Re,

On peut quand même se passer de VBA en utilisant :

- la fonction MCONCAT de la macro complémentaire Morefunc

- la fonction macro Excel 4.0 EVALUER.

Voyez le fichier joint et le nom défini matC :

Code:
=EVALUER("{"&MCONCAT(matA;";")&";"&MCONCAT(matB;";")&"}")
Nota: la macro complémentaire Morefunc de Laurent Longre est une bibliothèque de fonctions.

Téléchargez-la sur le web, c'est gratuit, puis installez-la.

A+
 

Pièces jointes

  • empilement de matrices avec Morefunc(1).xlsm
    10 KB · Affichages: 24
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Existe-t-il une fonction permettant d'empiler deux matrices?

Voir PJ

=DROITEREG(empilement(A2:A5;B2:B5))
=SOMME(empilement(A2:A5;B2:B5))

Code:
Function Empilement(Tab1, Tab2)
   Dim c()
   ReDim c(1 To Tab1.Count + Tab2.Count)
   For Each k In Tab1: i = i + 1: c(i) = k: Next
   For Each k In Tab2: i = i + 1: c(i) = k: Next
   Empilement = Application.Transpose(c)
End Function

JB
 

Pièces jointes

  • Empilement2.xls
    32.5 KB · Affichages: 21
Dernière édition:

job75

XLDnaute Barbatruc
Re : Existe-t-il une fonction permettant d'empiler deux matrices?

Re,

La formule du post #7 n'est valable que pour des matrices de nombres.

S'il s'agit de textes il faut ajouter des guillemets :

Code:
=EVALUER("{"""&MCONCAT(matA;""";""")&""";"""&MCONCAT(matB;""";""")&"""}")
Fichier (2).

A+
 

Pièces jointes

  • empilement de matrices avec Morefunc(2).xlsm
    10 KB · Affichages: 25

Discussions similaires

Réponses
19
Affichages
2 K

Statistiques des forums

Discussions
312 198
Messages
2 086 146
Membres
103 130
dernier inscrit
FRCRUNGR