Comment ne copier qu'une colonne de matrice dans une feuille?

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 !

jhlamoustache

XLDnaute Occasionnel
Bonjour le forum,

J'ai créé une matrice, et je souhaite reporter la deuxième colonne de cette matrice dans une plage.

Si je code plage = matrice c'est la première colonne de la matrice qui est collée.

Si je code plage = matrice(,1) ou matrice(*,1) ou matrice(?,1) j'ai une erreur de compilation.

Plus précisemment je souhaite le faire sans boucle car j'ai plus de 100 000 lignes à coller. Est-ce possible?

Pour info, je suis en base 0

Merci d'avance
 
Re : Comment ne copier qu'une colonne de matrice dans une feuille?

Re

Pourrais tu mettre un fichier exemple réellement représentatif de la situation, avec des anotations indiquant les emplacement des données, de la liste de correspondence, et l'endroit de restitution souhaitée?

Cordialement
 
Re : Comment ne copier qu'une colonne de matrice dans une feuille?

Re
[planchertbl].Offset(1, 0).Resize(UBound(T, 1), 1)= Application.Index(T, , 2)

Sinon, sans fichier clairement représentatif, j'abandonne.

Cordialement
 
Re : Comment ne copier qu'une colonne de matrice dans une feuille?

Re

Bon,

De subtiles modifs...

VB:
Sub EFGE()
Dim i&, D As Object, T As Variant, Td As Variant

Set D = CreateObject("Scripting.dictionary")

With Sheets("TBLDECOUPAGE6")
    T = .Range([CLE_TYPETRAVERSETBL].Offset(1, 0), _
        .Cells(.Rows.Count, [CLE_TYPETRAVERSETBL].Column).End(3)(1, 2))
    Td = .Range([CLE_TYPETRAVERSE].Offset(1, 0), _
        .Cells(.Rows.Count, [CLE_TYPETRAVERSE].Column).End(3)(1, 2))
End With

For i = LBound(Td, 1) To UBound(Td, 1)
    D(Td(i, 1)) = Td(i, 2)
Next i

For i = LBound(T, 1) To UBound(T, 1)
   If T(i, 1) <> "" Then T(i, 1) = D(T(i, 1))
Next i

[planchertbl].Offset(1, 0).Resize(UBound(T, 1), 1) = T
End Sub


Cordialement
 
Re : Comment ne copier qu'une colonne de matrice dans une feuille?

Re

Voici le classeur plus proche de la réalité,
Les valeurs lues dans la colonne U doivent renvoyer une valeur (Bois, TBA, métallique ou rien) dans la colonne AG en s'appuyant sur la table de la feuille "Liste Clés".

Cordialement
 

Pièces jointes

Re : Comment ne copier qu'une colonne de matrice dans une feuille?

Bonjour Efgé, le forum

Après une petite frayeur matinale, tout va bien. 0,5 seconde pour 137500 lignes au lieu de 20 mn avec des boucles imbriquées. Vivent les matrices!!!

Sans abuser de ta patience, pourrais-tu m'expliquer la fin de la ligne de code
T = .Range([CLE_TYPETRAVERSETBL].Offset(1, 0), _
.Cells(.Rows.Count, [CLE_TYPETRAVERSETBL].Column).End(3)(1, 2))
que signifie (1,2)?

Encore un grand merci

Très cordialement
 
Re : Comment ne copier qu'une colonne de matrice dans une feuille?

Bonjour jhlamoustache

Une petite explication

Chaque cellule est la cellule ligne1 colonne 1 d'un tableau vituel.
Utiliser (1, 2) c'est utiliser .offset(0,1) Même ligne et une colonne à droite.

Cela a servi à créer le tableau T avec deux colonnes.

Cordialement
 
Re : Comment ne copier qu'une colonne de matrice dans une feuille?

Bonjour EFGE, Gosselien, le forum

Merci (avec beaucoup de retard) de vos réponses.

L'erreur 13 est réapparue en prod car les données sources sur la colonne dont l'en-tête est CLE_TYPETRAVERSTBL ne sont pas homogènes; ou si elle n'apparait pas, le résultat est vide.
Pour voir les données en U10 : U 14 ont été modifiées (comme en prod).
Cliquez sur EFGE on obtient des vides en AG10 : AG 14
Effacer AG10 : AG14
et cliquez sur EFGE1 tout devient correct
Je l'ai traité en convertissant (Clng), et avec on error resume next (voir code en EFGE1).
Etait-ce la méthode correcte? Ou y a-t-il plus sûr?

Cordialement
 

Pièces jointes

Re : Comment ne copier qu'une colonne de matrice dans une feuille?

Bonjour jhlamoustache, gosselin

Il faut effectivement remettre les données au format Long.

Parcontre, au lieu de jouer sur les erreurs, tu peux utiliser ceci pour remplir le tableau final:
VB:
For i = LBound(T, 1) To UBound(T, 1)
   If T(i, 1) <> "" Then
        If InStr(T(i, 1), ";") = 0 Then T(i, 1) = T(i, 1) * 1
        T(i, 2) = D(T(i, 1))
   End If
Next i

Cordialement
 
- 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
3
Affichages
307
Réponses
10
Affichages
584
Retour