rabouter 2 matrices alphanumeriques

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
 

david84

XLDnaute Barbatruc
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+
 

dmc

XLDnaute Occasionnel
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

  • rabouter_matrices_alphanum.xlsx
    8.9 KB · Affichages: 55
  • rabouter_matrices_alphanum.xlsx
    8.9 KB · Affichages: 52
  • rabouter_matrices_alphanum.xlsx
    8.9 KB · Affichages: 54

david84

XLDnaute Barbatruc
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+
 

dmc

XLDnaute Occasionnel
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
 

david84

XLDnaute Barbatruc
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

  • rabouter_matrices_alphanum.xlsx
    10.5 KB · Affichages: 48
  • rabouter_matrices_alphanum.xlsx
    10.5 KB · Affichages: 49
  • rabouter_matrices_alphanum.xlsx
    10.5 KB · Affichages: 49

job75

XLDnaute Barbatruc
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

  • rabouter_matrices_alphanum(1).xls
    27 KB · Affichages: 35

job75

XLDnaute Barbatruc
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

  • MARABOUT(1).xls
    34 KB · Affichages: 32
Dernière édition:

job75

XLDnaute Barbatruc
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

  • MARABOUT(2).xls
    43 KB · Affichages: 39

job75

XLDnaute Barbatruc
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

  • MARABOUT(3).xls
    38 KB · Affichages: 39

david84

XLDnaute Barbatruc
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

  • rabouter_matrices_alphanum.xlsx
    10 KB · Affichages: 33
  • rabouter_matrices_alphanum.xlsx
    10 KB · Affichages: 37
  • rabouter_matrices_alphanum.xlsx
    10 KB · Affichages: 37

dmc

XLDnaute Occasionnel
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
Nom de champ :
champ=BD!$A$2:$A$500
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
 

david84

XLDnaute Barbatruc
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+
 

Discussions similaires

Statistiques des forums

Discussions
312 304
Messages
2 087 067
Membres
103 452
dernier inscrit
SOOSOKA