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.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas