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

Retourner mon array dans le classeur (pour une fonction)

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 !

cafejohn1967

XLDnaute Nouveau
Bonjour,

J'ai un code qui me mène ultimement à une array et j'aimerais que l'utilisateur puisse la retourne en faisant ctrl+maj+enter


Je suis mêlé à la fin et je ne trouve rien qui marche pour moi.

Je tente de faire un exemple tout simple pour éventuellement l'appliquer à mon autre code mais sans succès.

Dans ce code je veux simplement retourner la range (disons un array d'une seule colonne)


Function retourrange(x As Integer, zz As Range) As Variant()


Dim y()
Dim w As Integer

w = zz.Rows.Count

ReDim y(1 To w)

Dim i As Integer


For i = 1 To w

y(i) = zz(1) + x

Next i


retourrange = y(w)


End Function



Merci pour tout aide
 
Re : Retourner mon array dans le classeur (pour une fonction)

Bonsoir
Les tableaux de Variant à destination d'une plage ou retourné par une fonction matricielle personnalisée doivent en principe toujours avoir deux dimensions.
La seul exception tout juste tolérée c'est l'omission de la première, 1 To 1, pour des valeurs destinées à une seule ligne, mais jamais la deuxième, 1 To 1, à destination d'une seule colonne.
Cela dit WorksheetFunction.Transpose tolère aussi un tableau à une dimension et le transforme en tableau à 2 dimensions pour une seule colonne.
De plus vous renvoyez y(w) qui n'est pas un tableau.
 
Re : Retourner mon array dans le classeur (pour une fonction)

Bonjour,

fonction personalisée matricielle

Exemple:

Code:
Function SansDoublons(champ As Range)
  Set MonDico = CreateObject("Scripting.Dictionary")
  temp = champ
  For i = 1 To UBound(temp, 1)
    If Not MonDico.Exists(temp(i, 1)) Then MonDico.Add temp(i, 1), temp(i, 1)
  Next i
  SansDoublons = Application.Transpose(MonDico.items)
End Function

Utlisation dans le tableur

Sélectionner le champ D2 😀10
=sansdoublons(A2:A30)
Valider avec Maj+Ctrl+Entrée


JB
 
Dernière édition:
Re : Retourner mon array dans le classeur (pour une fonction)

Bonjour,

Ne ferais tu pas une confusion entre une fonction matricielle (array formula) et un array (tableau en mémoire vive de VBA) ?
Un array VBA est renvoyé par VBA dans la feuille et l'utilisateur n'a pas de saisie matricielle à faire.

cette page
Ce lien n'existe plus et surtout la suivante
Ce lien n'existe plus
devrait t'être utile pour mieux comprendre.

Si tu fais entrer les données d'une feuille dans un array, cet array a toujours deux dimensions, même si la plage ne comporte qu'une colonne. En effet une cellule de la feuille est TOUJOURS identifiée par la référence de la ligne ET celle de la colonne.

Tu peux créer un array à une dimension en entrant manuellement par exemple les jours de la semaine. Si tu écris ces jours dans la feuille, l'array aura deux dimensions.
 
Re : Retourner mon array dans le classeur (pour une fonction)

Bonjour cafejohn

Salut Dranreb , sajut JB ,Salut Misange

Je plussoie aux dires de mes éminents camarades

Vois ce que j'ai commis à partir de ton code et si cela peut te rendre service
 

Pièces jointes

Dernière édition:
- 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

Réponses
5
Affichages
707
Réponses
4
Affichages
581
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…