Function matricielle comment la lancer avec une macro

Goufra

XLDnaute Occasionnel
Bonjour à vous,

J'ai trouvé un code qui me conviendrait pour extraire les doublons vers une autre colonne.

Mais en lieu et place d'appliquer {=sansdoublons2(a2:a15)} dans la plage choisie.

Fichier joint.

Je souhaiterais une macro pour lancer cette fonction matricielle "Function SansDoublons2(champ As Range)"

Je n'ai pas réussi à trouver une réponse.

Je vous remercie d'avance
Cordialement
 

Fichiers joints

Goufra

XLDnaute Occasionnel
Re : Function matricielle comment la lancer avec une macro

Bonjour à vous,

J'ai trouvé ce code pour extraire vers une colonne une liste san doublon.

Il fait appel à une fonction matricielle VBA que l'on exécute avec :
{=sansdoublons2(a2:a15)}

fichier joint

Mais je souhaiterais une automatisation totale que cette fonction soit donc lancée par une macro

Avec mes remerciementss cordiaux pour votre aide.
 

Fichiers joints

BOISGONTIER

XLDnaute Barbatruc
Re : Function matricielle comment la lancer avec une macro

Bonjour,


Code:
Sub Essai2()
  [B2].Resize([A2:A13].Count) = SansDoublons2([A2:A13])
End Sub
ou
Code:
Sub Essai()
  Set mondico = CreateObject("Scripting.Dictionary")
  For Each c In [A2:A13]
    If c.Value <> "" Then mondico(c.Value) = c.Value
  Next c
  [B2].Resize(mondico.Count) = Application.Transpose(mondico.items)
End Sub

JB
Formation Excel VBA JB
 

Fichiers joints

Dernière édition:

Goufra

XLDnaute Occasionnel
Re : Function matricielle comment la lancer avec une macro

Bonjour et merci à vous,

Comme vous avez pu vous en rendre compte c'est sur votre site que j'avais trouvé le code et commencé à comprendre le fonctionnement.

La version que vous avez eu la gentillesse de m'adresser est plus intéressante.

En faisant apparaître le Zéro, si j'utilise la formule matricielle = sansdoublons etc ... j'obtiens des zéros après le dernier élément jusqu'en fin de plage. Ce qui n'est pas le cas en utilisant les 2 macros jointes.

Donc encore merci d'avoir pris la peine de me répondre.


Je vais abuser, pourriez-vous m'éclairer sur l'utilisation dans sub essai2() :

Mondico est un objet dictionnaire
c une inscription qui s'enregistre si <>"" entre a2 et a13

Mais après je ne comprends plus !

[B2].Resize(mondico.Count) = Application.Transpose(mondico.items)

Je crois que resize sert à redimentionner un tableau.

Mais l'écriture de la ligne pour en arriver à l'extraction à partir de B2 me laisse pantois.

Dans sub essai
[B2].Resize(UBound(SansDoublons([A2:A13]))) = SansDoublons([A2:A13])
je redimensionne même pb

Pourriez-vous me la traduire afin que je comprenne.

Je suis confus mais utiliser une formule sans la comprendre m'est difficile à accepter. (Je suis de la vieille école)


Je vous souhaite une bonne soirée.
Très cordialement






Bien cordialement.
 

BOISGONTIER

XLDnaute Barbatruc
Re : Function matricielle comment la lancer avec une macro

-mondico.items donne l'ensemble des items de mondico sous forme d'un tabeau horizontal.
-Application.Transpose(mondico.items) transforme en tableau vertical.
-[B2].Resize(mondico.Count) défini un champ vertical avec le nombre d'éléments de mondico


-SansDoublons([A2:A13])) renvoie un tableau.
-UBound(SansDoublons([A2:A13]))) donne le nombre d'éléments du tableau renvoyé par la fonction SansDoublons().
-[B2].Resize(UBound(SansDoublons([A2:A13]))) représente un champ vertical avec le nombre d'éléments renvoyés par la fonction SansDoublons().

JB
 
Dernière édition:

Goufra

XLDnaute Occasionnel
Re : Function matricielle comment la lancer avec une macro

Bonjour JB,

Merci pour vos explications qui me permettent de progresser

Très bonne journée cordialement.
 

Discussions similaires


Haut Bas