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

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
 

Efgé

XLDnaute Barbatruc
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
 

Efgé

XLDnaute Barbatruc
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
 

Efgé

XLDnaute Barbatruc
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
 

jhlamoustache

XLDnaute Occasionnel
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

  • Classeur2(2).xlsm
    34.2 KB · Affichages: 36
  • Classeur2(2).xlsm
    34.2 KB · Affichages: 26
  • Classeur2(2).xlsm
    34.2 KB · Affichages: 39

jhlamoustache

XLDnaute Occasionnel
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
 

Efgé

XLDnaute Barbatruc
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
 

gosselien

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

Bonjour,

si j'ai bien compris ce que tu veux :)

La colonne A dans "Liste Clés", est nommée "table"

P.
 

Pièces jointes

  • Classeur2(2) moustache.xlsm
    41 KB · Affichages: 16

jhlamoustache

XLDnaute Occasionnel
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

  • Classeur2(2) .xlsm
    39.3 KB · Affichages: 23

Efgé

XLDnaute Barbatruc
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
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 852
Membres
103 974
dernier inscrit
chmikha