rabouter 2 matrices alphanumeriques

  • Initiateur de la discussion Initiateur de la discussion dmc
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dmc

XLDnaute Occasionnel
Bonjour à tout le forum.
Partant d'une matrice matr1 = {AA;AB;AC} et d'une matrice matr2 = {BA;BB;BC;BD}
comment obtenir, par formule et non pas par VBA, une matrice matr3 = {AA;AB;AC;BA;BB;BC;BD} ?

j'ai eu beau chercher dans tous les tutoriels, je sèche !!!

d'avance merci pour vos conseils

DMC
 
Re : rabouter 2 matrices alphanumeriques

Bonjour,
si l'on demande un petit fichier exemple, ce n'est pas pour rien...comment sont présentées ce que tu appelles tes matrices ?
AA;AB;AC se trouvent dans la même cellule ou dans des cellules contiguës ? en ligne ou en colonne ?
Le plus simple : tu places un exemple explicite sur un fichier avec le résultat attendu noté manuellement.
A+
 
Re : rabouter 2 matrices alphanumeriques

bonjour camarchepas et david84
j'espérais passer au travers du fichier exemple, c'est maintenant rectifié :
xlsx.gif
rabouter_matrices_alphanum.xlsx (8,9 Ko)
Amicalement
DMC
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Re
j'espérais passer au travers du fichier exemple, c'est maintenant rectifié
c'est pourtant la preuve que c'est utile.
Ci-joint une formule matricielle à tester :
- créer une plage nommée "zone" regroupant les différentes matrices à traiter puis :
Code:
=INDIRECT(ADRESSE(MOD(PETITE.VALEUR(SI(ESTTEXTE(zone);NB.SI(zone;"<"&zone)*10^5+LIGNE(zone));LIGNES($1:1));10^5);MOD(MOD(PETITE.VALEUR(SI(ESTTEXTE(zone);NB.SI(zone;"<"&zone)*10^5+LIGNE(zone)*10^2+COLONNE(zone));LIGNES($1:1));10^5);10^2)))
Valider par Ctrl, Maj et entrée.
A+
 
Re : rabouter 2 matrices alphanumeriques

Mon cher David84, à qui j'ai "emprunté" tant de formules magiques, et auquel je voue le plus grand respect!
Tout mon problème est que malgré ces "emprunts", je n'y ai pas trouvé comment regrouper ces différentes matrices en une plage nommée "zone".
pourrais-je te demander de me retourner le fichier exemple complété ?
Merci de t'y intéresser.
David DMC
 
Re : rabouter 2 matrices alphanumeriques

Re
En fait, s'il s'agit d'avoir les matrices les unes à la suite des autres :
Code:
=INDIRECT(ADRESSE(DROITE(PETITE.VALEUR(SI(ESTTEXTE(zone);LIGNE(zone)/10^2+COLONNE(zone));LIGNE(1:1));2);PETITE.VALEUR(SI(ESTTEXTE(zone);COLONNE(zone));LIGNE(1:1))))
Ci-joint le fichier avec les 2 propositions.
A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Bonjour dmc, camarche pas, re David,

On ne peut pas (par formule) créer la matrice matr3 sans plage intermédiaire (en colonne D).

Formule en D2 à tirer vers le bas :

Code:
=SI(LIGNES(D$2:D2)<=NBVAL(matr1);INDEX(matr1;LIGNES(D$2:D2));INDEX(matr2;LIGNES(D$2:D2)-NBVAL(matr1)))
Ensuite on peut nommer matr3 la plage obtenue :

Code:
=DECALER(Feuil1!$D$1;1;;NBVAL(matr1;matr2))
Fichier joint.

PS : je sens que je vais me faire flasher 🙂

A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Re,

Merci Jean-Claude, je passerai au salon pour le café.

Une tite fonction VBA quand même :

Code:
Function MARABOUT(mat1, mat2)
Dim tablo(), t, n&
ReDim tablo(Application.CountA(mat1, mat2) - 1)
For Each t In mat1
  tablo(n) = t
  n = n + 1
Next
For Each t In mat2
  tablo(n) = t
  n = n + 1
Next
MRABOUT = tablo
End Function
Cette fonction renvoie un tableau à une dimension (vecteur ligne).

Fichier joint.

Edit : MARABOUT comme nom me plaît bien.

A+
 

Pièces jointes

Dernière édition:
Re : rabouter 2 matrices alphanumeriques

Re,

Pour généraliser, toujours en VBA, cette fonction peut "rabouter" jusqu'à 20 matrices :

Code:
Function MARABOUT(m1, Optional m2, Optional m3, Optional m4, Optional m5, _
Optional m6, Optional m7, Optional m8, Optional m9, Optional m10, _
Optional m11, Optional m12, Optional m13, Optional m14, Optional m15, _
Optional m16, Optional m17, Optional m18, Optional m19, Optional m20)
Dim a, i As Byte, tablo(), t, n&
a = Array(m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, _
m11, m12, m13, m14, m15, m16, m17, m18, m19, m20)
For i = 0 To UBound(a)
  If Not IsError(a(i)) Then
    For Each t In a(i)
      ReDim Preserve tablo(n)
      tablo(n) = t
      n = n + 1
    Next
  End If
Next
MARABOUT = tablo
End Function
Fichier (2).

A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Re, pour finir,

On peut bien sûr entrer une plage de cellules comme argument de la fonction.

Avec éventuellement un calcul matriciel comme dans le fichier (3).

Formule matricielle sur E2:E25 :

Code:
=TRANSPOSE(MARABOUT(SI(ESTTEXTE(A2:D7);A2:D7;"-")))
A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Bonsoir,
pour réellement créer une matrice par formules sans colonne intermédiaire :
- sélectionner une plage plus importante que le nombre de cellule que la plage "zone"
- rentrer
Code:
=INDIRECT(ADRESSE(DROITE(PETITE.VALEUR(SI(ESTTEXTE(zone);LIGNE(zone)/10^2+COLONNE(zone));LIGNE(INDIRECT("1:"&NBVAL(zone))));2);PETITE.VALEUR(SI(ESTTEXTE(zone);COLONNE(zone));LIGNE(INDIRECT("1:"&NBVAL(zone))))))
- valider matriciel (Ctrl, Maj et entrée)
- cacher les valeurs d'erreur au moyen d'une MFC ou en utilisant =SIERREUR dans la formule.
A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Merci à tous, job 75 et david84 en particulier.
La formule de david84 me convient particulierement.
Pour aller plus loin, la matrice zone peut-elle être créée en plage nommée sans être matérialisée sur une colonne ?
A partir de là, mon objectif est de pouvoir l'utiliser dans d'autres formules, en particulier celle de tri matriciel sans doublon réalisée par david84 : TriMatSansDoublons
[TABLE="width: 142"]
[TR]
[TD="colspan: 2"]Nom de champ :[/TD]
[/TR]
[TR]
[TD]champ[/TD]
[TD]=BD!$A$2:$A$500[/TD]
[/TR]
[/TABLE]
formule :
=INDEX(champ;EQUIV(PETITE.VALEUR(SI(champ<>"";SI(EQUIV(champ;champ;0)=LIGNE(INDIRECT("1:"&LIGNES(champ)));NB.SI(champ;"<"&champ)));LIGNE(INDIRECT("1:"&LIGNES(champ))));SI(champ<>"";SI(EQUIV(champ;champ;0)=LIGNE(INDIRECT("1:"&LIGNES(champ)));NB.SI(champ;"<"&champ)));0))

-Valider avec Maj+ctrl+entrée
Il sera très pratique de pouvoir comparer trier deux tables de données, dans mon cas situées sur 2 feuilles différentes, sans pour autant consommer des colonnes intermédiaires qui "polluent " le décor.
Bien entendu, je compte toujours autant sur vous !!
Amicalement
DMC
 
Re : rabouter 2 matrices alphanumeriques

Re
Pour aller plus loin, la matrice zone peut-elle être créée en plage nommée sans être matérialisée sur une colonne ?
zone est une plage, non une matrice. Si tu parles du résultat ramené par la formule, il faut bien qu'il soit affiché dans la feuille de calcul. Tu peux cependant nommer la plage renvoyée par le formule mais je ne vois pas bien pourquoi faire.
Je pense qu'un fichier exemple présentant fidèlement ton attente nous permettrait de te répondre avec plus de précision.
A partir de là, mon objectif est de pouvoir l'utiliser dans d'autres formules, en particulier celle de tri matriciel sans doublon réalisée par david84
Là encore, une formule sans fichier exemple ne nous donne aucune indication.
sans pour autant consommer des colonnes intermédiaires qui "polluent " le décor
Il vaut quelquefois mieux passer par des colonnes intermédiaires que l'on peut masquer si cela permet de comprendre la solution proposée.
Bien entendu, je compte toujours autant sur vous !!
Je te conseille de ne pas écarter la fonction personnalisée proposée par Job75, elle sera peut-être plus facile d'utilisation par rapport à ce que tu veux obtenir au final.
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

S
Réponses
4
Affichages
3 K
S
A
Réponses
1
Affichages
1 K
A
H
Réponses
19
Affichages
7 K
X
Réponses
3
Affichages
1 K
martinhic
M
N
Réponses
2
Affichages
1 K
NEMOVERNE
N
M
Réponses
4
Affichages
2 K
manuuue
M
M
Réponses
4
Affichages
4 K
M
O
Réponses
11
Affichages
2 K
oohcalme
O
Retour