Colonne Excel vers Tableau VBA?

Fermé
Gigix - 12 janv. 2012 à 08:43
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 14 janv. 2012 à 15:01
Bonjour,

Dans le cadre de ma formation à l'IUT de Nantes, j'ai besoin d'importer une colonne de données vers un tableau Excel pour comparer les valeurs qu'elle contient.

Cordialement,

A voir également:

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 757
13 janv. 2012 à 13:27
Bonjour,
Je considère, dans les exemples proposés, qu'il s'agit de la colonne A...
Deux solutions :
La boucle :
Dim Lig As Long, DernLig As Long
Dim MonTab()
DernLig = Range("A" & Rows.Count).End(xlUp).Row
ReDim MonTab(DernLig)
For Lig = 0 To DernLig - 1
    MonTab(Lig) = Range("A" & Lig + 1)
Next

Application.Transpose :
Dim MonTab
Dim DrLig As Long
DrLig = Range("A" & Rows.Count).End(xlUp).Row
MonTab = Application.Transpose(Range("A1:A" & DrLig).Value)

!!! Variante de la solution 2 pour les "heureux" (;-)) possesseurs de la version Excel 97...
Dim MonTab
Dim DrLig As Long
DrLig = Range("A" & Rows.Count).End(xlUp).Row
MonTab = Range("A1:A" & DrLig)

Attention, Xl97 créé un tableau multidimensionnel à une seule colonne. La restitution des données se fera grâce à MonTab(Lig, 1) au lieu de MonTab(Lig).

Les différences entre ces deux méthodes (boucle ou transpose) sont :
- vitesse d'exécution, + rapide pour Application.Transpose (le gain n'est significatif que sur de très grands tableaux... A titre d'exemple sur 45 000 lignes : boucle en 0,60 sec, transpose en 0,04 sec!)
- la restitution des données se fera en Base 0 par défaut pour la boucle, et en Base 1 pour Transpose :
Boucle :
Dim Lig As Long, DernLig As Long
Dim MonTab()
'Remplissage
DernLig = Range("A" & Rows.Count).End(xlUp).Row
ReDim MonTab(DernLig)
For Lig = 0 To DernLig - 1
    MonTab(Lig) = Range("A" & Lig + 1)
Next
'Restitution
For Lig = 0 To Ubound(MonTab)
    Range("B" & Lig + 1) = MonTab(Lig)
Next

Application.Transpose :
Dim MonTab
Dim DrLig As Long, Lig As Long
'Remplissage
DrLig = Range("A" & Rows.Count).End(xlUp).Row
MonTab = Application.Transpose(Range("A1:A" & DrLig).Value)
'Restitution
For Lig = 1 To Ubound(MonTab)
    Range("B" & Lig + 1) = MonTab(Lig)
Next

- La non nécessité de dimensionner lors de l'utilisation de Transpose. On voit dans mes exemples de boucle la présence de ReDim ou accessoirement Preserve. Ces deux instructions sont superflues dans l'utilisation de Application.Transpose.
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
13 janv. 2012 à 17:18
et pour terminer + vite
au lieu de
For Lig = 1 To Ubound(MonTab)
    Range("B" & Lig + 1) = MonTab(Lig)
Next

1 seule ligne
Range("B1").resize(ubound(montablo),1)=application.transpose(montablo)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 757
14 janv. 2012 à 15:01
Oui.
Mais je crois que gigix est parti passer son DUT...
0