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,

Pas certain que dmc ait bien compris la solution de mon post #8.

Elle n'utilise qu'une colonne intermédiaire, pour la matrice des résultats, on peut supprimer les colonnes A et B.

La plage "zone" de David nécessite deux colonnes intermédiaires, une pour chaque matrice.

Pour autant sa solution est tout à fait intéressante, mais je défends mon beefsteak 😛

A+
 
Re : rabouter 2 matrices alphanumeriques

Re
Pas certain que dmc ait bien compris la solution de mon post #8.
D'accord avec toi : je ne suis pas sûr que le demandeur ait bien saisi la nuance : la fonction de Gérard ne nécessite pas que les matrices matr1, matr2,..., matr n apparaissent dans la feuille de calcul pour que MARABOUT ramène la matrice obtenue (les matr1, matr2, matr n l'une à la suite de l'autre).
C'est pour cela que j'ai bien précisé qu'il ne fallait pas écarter cette solution avant de comprendre quel est exactement le résultat final à obtenir...ce que je n'ai toujours pas compris pour ma part.
A+
 
Re : rabouter 2 matrices alphanumeriques

Re
Alors là c'est autre chose :
- zone n'est pas une colonne intermédiaire mais une plage nommée
- ta formule est viable sur peu de colonnes mais si tu en as 10 ou 20, elle va rapidement manquer de compacité.
Ma proposition fonctionne sur une plage qui peut être importante.
De plus, tu peux sélectionner si besoin le type de valeur que tu veux prendre en compte (pas de besoin sur cet exemple spécifique mais c'est quand même intéressant).
Personnellement je suis a priori plus intéressé par ta proposition VBA mais j'attends d'en savoir plus sur la finalité du projet avant de porter un jugement définitif.
A+
 
Re : rabouter 2 matrices alphanumeriques

Bonjour à tous,

Suite au fichier (1) du post #8 voici une solution par formules pour rabouter 4 matrices.

Elle utilise la fonction macro Excel 4.0 EVALUER.

Fichier (2) joint, comme on le voit une seule colonne est utilisée.

A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Re,

Voici une solution extrêmement simple.

Elle utilise les fonctions macros Excel 4.0 LIRE.NOM et EVALUER.

Nom défini marabout :

Code:
=EVALUER(SUBSTITUE(SUBSTITUE(LIRE.NOM("matr1")&LIRE.NOM("matr2")&LIRE.NOM("matr3")&LIRE.NOM("matr4");"=";"");"}{";";"))
Il n'y a plus besoin de colonne intermédiaire, tout se fait par les noms définis.

La plage A2:A19 sert uniquement à restituer et vérifier le nom marabout.

Fichier (3).

A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Bonsoir,
Bravo Gérard, j'aime bien le principe de ta dernière mouture.
Le problème, c'est que s'il y a beaucoup de matrices et/ou si l'utilisateur doit en rajouter souvent, cela devient vite difficile à gérer, mais c'est le principe qui est intéressant.

Personnellement j'avais cette idée en tête mais en VBA afin de boucler sur l'ensemble des noms définis de la feuille et de ramener leur contenu dans un array puis le restituer dans la feuille sous forme d'une matrice (peut-être pas en fonction mais plus avec une sub déclenchée par un évènement, mais bon après il faut voir).

Ceci-dit, sans retour d'info de la part du demandeur sur ce qui a déjà été proposé et sur ce qu'il attend vraiment, je ne me lance pas "à l'aveugle".
A+
 
Re : rabouter 2 matrices alphanumeriques

Bonjour david84, job 75
Très loin de laisser tomber, mais ce week-end était chargé.
Je commence à exploiter vos réponses, et à tenter de détailler plus, via ce fameux fichier exemple, la nature de ma demande.
Mais cela est long. je m'y replonge ce soir.
Dans l'état, vos solutions m'ont permis de faire un bond dans ma recherche, qui se fait plus par plaisir de manipuler Excel que dans le besoin professionnel pur.
Merci et à ce soir.
DMC
 
Re : rabouter 2 matrices alphanumeriques

Bonjour David, le fil,

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...).

C'est ainsi que j'ai procédé pour mes solutions (2) et (3) précédentes.

Bien voir d'ailleurs la différence entre les deux :

- la solution (3) nécessite que les 4 matrices soient définies en dur, entre accolades, on ne peut pas utiliser des plages.

- la solution (2) est plus générale, elle permet de définir les matrices par des plages de cellules.

Dans les 2 cas les matrices doivent être des vecteurs (une colonne ou une ligne).

La solution (2) peut d'ailleurs ici être légèrement simplifiée, voir le fichier (2 bis).

A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Re,

Personnellement j'avais cette idée en tête mais en VBA afin de boucler sur l'ensemble des noms définis de la feuille

C'est une excellente idée, cette fonction VBA étudie les noms du classeur :

Code:
Function MARABOUT()
Dim nom, mat, t, tablo(), n&
Application.Volatile
For Each nom In ThisWorkbook.Names 'noms définis dans le classeur
  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
Next
MARABOUT = tablo 'vecteur ligne
End Function
Fichier joint.

A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Bonjour,

en fait, sur le principe, voilà l'idée (à peaufiner bien sûr, version Béta non dégrossie) :
Code:
Function Matrices()
Dim i&, Pl, s
    For i = 1 To Worksheets.Parent.Names.Count
        Pl = Pl & Worksheets.Parent.Names(i)
    Next i
    Pl = Replace(Replace(Replace(Replace(Replace(Pl, "}={", ";"), """", ""), "{", ""), "}", ""), "=", "")
    Matrices = Application.Transpose(Split(Pl, ";"))
End Function
A+
Edit : @Gérard, je viens de voir ton message : je regarde ta proposition.
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Re,

On peut aussi utiliser les noms des matrices s'ils sont numérotés :

Code:
Function MARABOUT()
Dim i&, mat, t, tablo(), n&
Application.Volatile
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
      ReDim Preserve tablo(n)
      tablo(n) = t
      n = n + 1
    Next
  End If
Next
MARABOUT = tablo 'vecteur ligne
End Function
Fichier (5).

A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Re Gérard

Yes !!! C'est exactement cela. Je préfère ta solution à la mienne (plus propre, utilisation de
Evaluate(nom.RefersTo)
(p...., j'aurais dû y penser !).
Peut-être pourrais-tu prévoir un argument optionnel permettant à l'utilisateur de ne sélectionner que les noms définis d'une feuille du genre =MARABOUT ("Feuil1") (garder par défaut le fait de boucler sur tous les noms du classeur comme cela est le cas actuellement).
On sent que tu as l'habitude de manipuler les plages nommées via VBA (perso, c'est la 2ème fois que je m'y essaye donc pas évident mais je trouve cela intéressant).
A+
 
Re : rabouter 2 matrices alphanumeriques

Re David,

Peut-être pourrais-tu prévoir un argument optionnel permettant à l'utilisateur de ne sélectionner que les noms définis d'une feuille

Oui, mais il faut étudier les noms du classeur au cas où les matrices ne sont pas des plages...

Dans cette fonction je n'utilise pas d'argument mais seules les plages de la feuille où se trouve la fonction son traitées :

Code:
Function MARABOUT()
Dim i&, mat, test As Boolean, t, tablo(), n&
Application.Volatile
For i = 1 To 1000 'jusqu'à 1000 noms...
  On Error Resume Next
  mat = Evaluate(ThisWorkbook.Names("matr" & i).RefersTo)
  If Err = 0 Then
    test = True: test = mat.Parent.Name = Application.Caller.Parent.Name
    If test 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
Fichier (6).

A+
 

Pièces jointes

Re : rabouter 2 matrices alphanumeriques

Re

personnellement, je préfère celle de ton message #25 : si tu nommes une matrice Toto, celle-ci la prend en compte alors que ta dernière proposition ne le fait pas.
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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…