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
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,
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:
- Colonne Excel vers Tableau VBA?
- Déplacer une colonne excel - Guide
- Formule somme excel colonne - Guide
- Trier colonne excel - Guide
- Tableau word - Guide
- Tableau ascii - Guide
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
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 :
Application.Transpose :
!!! Variante de la solution 2 pour les "heureux" (;-)) possesseurs de la version Excel 97...
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 :
Application.Transpose :
- 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.
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.
13 janv. 2012 à 17:18
au lieu de
1 seule ligne
14 janv. 2012 à 15:01
Mais je crois que gigix est parti passer son DUT...