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

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

Re

juste une idée par rapport à la possibilité de placer dans ta fonction un argument optionnel pour choisir l'onglet à traiter (on peut faire plus concis mais c'est juste un essai pour voir).
A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

re-bonjour david84 et job 75
J'ai profité de la mi-journée pour étudier la formule de job75, qui a parfaitement compris mon besoin :
PHP:
Je pense que ce que veut dmc est simple dans son principe.
A partir de matrices nommées matr1, matr2, matr3... il veut créer une matrice nommée
marabout= F(matr1,matr2,matr3...).
mais les matrices matr1 à matr4 doivent être définies en dur, alors que les miennes sont dynamiques (décaler etc...).
J'ai joint une version "plantée" du fichier dans laquelle je décris le résultat désiré. Merci d'avance
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Bonjour dmc,

Il faut suivre le fil dmc...

J'ai bien dit qu'avec cette solution les matrices doivent être définies en dur, entre accolades.

Si vous utilisez des plages, prenez la solution par formule (2) ou (2 bis) ou l'une de mes solutions VBA.

A+
 
Re : rabouter 2 matrices alphanumeriques

Re
ci-joint une version plus compacte de MARABOUT comportant l'argument optionnel onglet :
Code:
Function MARABOUT(Optional onglet As String)
Dim nom, mat, t, tablo(), n&
Application.Volatile
For Each nom In ThisWorkbook.Names 'noms définis dans le classeur
    If nom.Name Like onglet & "*" Then
        mat = Evaluate(nom.RefersTo)
        If Application.CountA(mat) > 1 Then
            For Each t In mat
                ReDim Preserve tablo(n)
                tablo(n) = t
                n = n + 1
            Next
        End If
    End If
Next
MARABOUT = tablo 'vecteur ligne
End Function

@dmc : je pense que la solution à ta demande se trouve déjà parmi les solutions proposées.
Les as-tu testées ?
A+
 
Re : rabouter 2 matrices alphanumeriques

Re
Si l'on ne veut pas voir apparaître les valeurs d'erreur et éviter par là-même le Preserve :
Code:
Function MARABOUT(Optional onglet As String)
Dim nom, mat, t, tablo(), n&
Application.Volatile
ReDim tablo(0 To Application.Caller.Rows.Count)
For Each nom In ThisWorkbook.Names 'noms définis dans le classeur
    If nom.Name Like onglet & "*" Then
        mat = Evaluate(nom.RefersTo)
        If Application.CountA(mat) > 1 Then
            For Each t In mat
                tablo(n) = t
                n = n + 1
            Next
        End If
    End If
Next
MARABOUT = tablo 'vecteur ligne
End Function
Pour toutes les matrices du classeur :
Code:
=TRANSPOSE(MARABOUT())&""
Pour toutes les matrices de l'onglet "Feuil2":
Code:
=TRANSPOSE(MARABOUT("Feuil2"))&""
A+
 
Dernière édition:
Re : rabouter 2 matrices alphanumeriques

Re,

Bien noté dans le fichier du post #32 :

2) l'objectif étant d'obtenir une matrice classée sans doublons regroupant ces 4 matrices sans VB et sans colonne supplémentaire

A force d'être trop gourmand dmc vous allez vous étouffer.

En tout cas pour moi ça suffit.

Avec VBA on fait tout sans problème, si vous virez votre cuti dites-le nous.

A+
 
Re : rabouter 2 matrices alphanumeriques

Re,

Une solution VBA pour créer la matrice marabout classée sans doublon.

Ici j'utilise une procédure Sub lancée par un bouton.

Edit : pour le classement j'utilise la macro Quick sort de Jacques Boisgontier.

A+
 

Pièces jointes

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

Re
par formule c'est possible à condition que les différentes matrices soient incrémentées dans la feuille de calcul :
créer la plage zone et rentrer en C2, valider en matriciel et tirer la formule vers le bas :
Code:
=SI(LIGNES($1:1)<=SOMME(SI(zone<>"";1/NB.SI(zone;zone)));INDIRECT(ADRESSE(MOD(MIN(SI((zone<>"")*(NB.SI(C$1:C1;zone)=0);NB.SI(zone;"<"&zone)*10^5+LIGNE(zone)));10^5);MOD(MOD(MIN(SI((zone<>"")*(NB.SI(C$1:C1;zone)=0);NB.SI(zone;"<"&zone)*10^5+LIGNE(zone)*10^2+COLONNE(zone)));10^5);10^2)));"")
Mais la plage créée n'est pas à proprement parler une matrice.

Sinon, la macro proposée par Job75 fait le travail. Je pense que l'on peut d'ailleurs la simplifier :
Code:
Sub marabout()
Dim d As Object, i&, mat, t, tablo(), n&
Set d = CreateObject("Scripting.Dictionary") 'pour éliminer les doublons
For i = 1 To 1000 'jusqu'à 1000 noms...
  On Error Resume Next
  mat = Evaluate(ThisWorkbook.Names("matr" & i).RefersTo)
  If Err = 0 Then
    For Each t In mat
        d(t) = d(t)
    Next
  End If
Next
tablo = d.keys
Call tri(tablo, LBound(tablo), UBound(tablo))
ThisWorkbook.Names.Add "marabout", tablo 'vecteur ligne
End Sub
A+
Et là tu créés tu vraie matrice à partir de matrices qui n'ont pas besoin d'êtres inscrites dans la feuille de calculs.
A+
 
Re : rabouter 2 matrices alphanumeriques

Re,

Sinon, la macro proposée par Job75 fait le travail. Je pense que l'on peut d'ailleurs la simplifier (...)

Tout à fait, merci David, et on peut même simplifier encore :

Code:
Sub marabout()
Dim d As Object, i&, mat, t, tablo
Set d = CreateObject("Scripting.Dictionary") 'pour éliminer les doublons
On Error Resume Next
For i = 1 To ThisWorkbook.Names.Count
  mat = Evaluate(ThisWorkbook.Names("matr" & i).RefersTo)
  For Each t In mat
    d(t) = t
  Next
Next
tablo = d.keys
Call tri(tablo, LBound(tablo), UBound(tablo))
ThisWorkbook.Names.Add "marabout", tablo 'vecteur ligne
End Sub
Fichier (2).

A+
 

Pièces jointes

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

Bonjour Job75 et David84
Merci pour vos recherches... et pour vos réponses.
m'étouffer n'est sans doute pas le mot. Peut-être un vertige (admiratif) lorsque je tente de comprendre le fin fond de vos formules.
Virer ma cuti ? ce n'était pas à l'ordre du jour, mais je pense que je vais devoir y penser.
L'inconvénient des macros, en particulier, est qu'elles interdisent le retour en arrière de l'utilisateur (le UNDO).
Tant pis, j'interdirai dorénavant le droit à l'erreur, en commençant par moi bien entendu.
Amicalement
 
Re : rabouter 2 matrices alphanumeriques

Bonsoir dmc, David,

L'inconvénient des macros, en particulier, est qu'elles interdisent le retour en arrière de l'utilisateur (le UNDO).

Si l'on veut pouvoir annuler la création du nom marabout :

Code:
Application.OnUndo "Annuler", "Annuler"
Fichier (3), voir la macro Annuler.

A+
 

Pièces jointes

- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…