|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Pierre Bernier Inscription : mai 2010 Messages : 41 ![]() |
Bonjour,
j'ai un tableau 2D de 15x2 dans une variable et je voudrais sélectionner les 15 valeurs de la première colonne sans devoir faire une boucle for. Est-ce possible? Ex : vecteur1d=tableau2d(:,1) Merci! |
|
|
00
|
|
|
#2 | |||
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 885 ![]() |
Bonjour,
Je trouve qu'une boucle for est plus "propre" mais pour répondre à ta question tu peux utiliser une plage de cellule Code :
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
|||
|
|
00
|
|
|
#3 | ||||||||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
A la ligne 5 précédente, comme tableau2d a deux dimensions -- 15 rangées sur 2 colonnes --, l'affectation proposée a de forte chance de modifier à la fois les colonnes A & B. Hors on souhaite extraire la première colonne de tableau2d sans boucle For Next.
Cela sera montré au chapitre 2 par une façon que d'aucuns trouveront un tout petit peu inhabituel grâce à l'instruction peu connue LSet pour extraire la première colonne du tableau 2D sans boucles apparentes. 1. Ecrire un vecteur 1D dans une portion de colonne de la feuille Au final on aboutira à l'affectation 2D vers 1D demandée, les boucles For Next intermédiaires ne servant qu'à lire le tableau 2D ou modifier ses éléments mais ne sont pas utilisées pour la lecture ou l'écriture sur la feuille. L'utilisation de l'expression "sélectionner les 15 valeurs de la première colonne" a pu faire penser qu'il s'agissait d'une écriture du tableau2d vers la feuille Excel. Code :
Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, copier-coller et valider par ENTER : Sur la feuille, les nombres ont été incrémentés de patcherColA = 1 en colonne A et de patcherColB = 10 en colonne B. On lit dans un Variant la colonne A. Une fois le variant modifié, l'écriture est réalisée en une seule opération. Plutôt qu'un variant on peut également utiliser un faux vecteur 1D dont la seconde dimension est toujours colVar = 1 : Code :
On utilise l'instruction LSet pour séparer la première colonne de la seconde d'un tableau 2D sans boucle For Next. Code :
Sur la feuille, les nombres ont été restaurés à leurs valeurs initiales 1 à 15 en colonne A et B mais en deux étapes bien distinctes à suivre en pas à pas dans le débogueur pour démontrer l'affectation de chaque vecteur individuellement par colonne. 3. Performance For Next 2D -> 1D vs. double LSet Vérifions la performance du double LSet par rapport à extraire la première colonne du tableau 2D 15 rangées * 2 colonnes par une boucle For Next classique. Code :
Code :
Le LSet apporte un gain ! Même s'il faut relativiser ce gain en considérant le nombre d'itérations 100000000 pour faire apparaître une différence de performance. Le programme de mesure de la performance s'est arrêté sur le Stop avant End Sub. Dans la fenêtre d'Exécution immédiate : Code :
? arr2D(rowDataEnd, colDataFirst) & " = " & arr1D(rowDataEnd) & " = " & vector1D.ArrTab1D(rowDataEnd) ___________ Si la discussion est résolue, vous pouvez cliquer sur le bouton En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.
|
||||||||||
|
|
00
|
|
|
#4 | ||||
![]() ![]() Didier GONARDFormateur Développeur Office - indépendant Inscription : février 2008 Messages : 2 353 ![]() |
Citation:
la vraie question serait : est-ce raisonnable ? Alourdir une appli par une usine à Gaz, est-ce vraiment le but ? Surtout si on considère le but final d'un code (hors son bon fonctionnement qui est de rigueur) : légèreté, lisibilité, portabilité, maintenance. Citation:
http://silkyroad.developpez.com/vba/tableaux/#LXIV-E voir ici, sinon : http://didier-gonard.developpez.com/...vba/#LVIII-C-2 cordialement, Didier
__________________
Didier Gonard Ps : Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite ! Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP N'oubliez pas de mettre : ..quand c'est le cas !
|
||||
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Inscription : mai 2006 Messages : 335 ![]() |
Bonjour à tous
Nous ne connaissons pas le but final de cette "manipulation", mais pour ma part, je ferai tout simplement 2 tableaux distincts . Eric |
|
|
00
|
|
|
#6 |
|
Futur Membre du Club
![]() Pierre Bernier Inscription : mai 2010 Messages : 41 ![]() |
Bonjour,
j'aurais due préciser un peu plus, j'ai un tableau 2D de 15x2 dans une variable suite à des calculs faits dans excel. Le but était d'extraire les noms des colonnes du tableau (qui n'ont aucun lien avec les noms des colonnes excel pour ensuite les envoyer dans l'axe X d'un histogramme. Dans le langage matlab c'est possible simplement avec la commande variable2=variable1(15, : ). Peut-être que VBA n'a pas été conçu de la même manière... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com