Récupérer les données d'une feuille dans un tableau + Range vide

Résolu/Fermé
RemRob Messages postés 3 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 13 juin 2017 - 13 juin 2017 à 17:04
RemRob Messages postés 3 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 13 juin 2017 - 13 juin 2017 à 17:54
Bonjour,

Je suis nouveau sur le forum, je m'appelle Rémi et je suis en études d'ingénierie énergétique. Je réalise actuellement un programme assez complexe en VBA.

Je réalise un programme qui doit traiter des données présentes dans une feuille, nommée "DATA".

Afin de manipuler rapidement ces données je veux en premier lieu les stocker dans un tableau de 60 colonnes et 1000 lignes. Ensuite je pourrai les manipuler autant de fois que je veux (beaucoup de manipulations à faire dans mon cas, raison pour laquelle je veux éviter à mon code VBA d’interagir avec ma feuille Excel).

Or, je ne veux récupérer dans mon tableau que les données qui correspondent à des critères de choix définis par l'utilisateur. Ainsi, je vais récupérer dans mon tableau uniquement une partie des données présentes dans la feuille Excel nommée "DATA".

Pour cela j'ai défini une variable range nommée SOURCE (dont la plage est "A1:BH1000") qui contient les données présentes dans la feuille "DATA". J'ai une autre plage, nommée CIBLE, qui contiendra les données "filtrées".
J'utilise un range pour CIBLE car les fonctions des objets range me facilitent la tâche pour le filtrage.
Pour donner sa taille au range CIBLE, je l'ai initialisé comme suit:
Set CIBLE=Sheets("Feuil1").Range("A1:BH1000")
(Feuil1 est une autre feuille, vide, que j'utilise pour initialiser la taille du range CIBLE)

Ensuite, avec deux boucles sur les lignes et les colonnes, je remplis mon tableau avec les données présentes dans le range CIBLE.

Tout marche super bien.

Sauf que, au fur et à mesure que mon range CIBLE se remplit, les cellules de la feuille "Feuil1" se remplissent des données du range CIBLE! Or je veux que ce ne soit pas le cas, car la feuille "Feuil1" sera utile à autre chose plus tard (j'ai beaucoup d'autres feuilles dans mon projet, ainsi je veux limiter le nombre de feuilles et le nombre d'interactions entre le programme VBA et les feuilles Excel).

J'ai cherché mais je n'ai pas trouvé comment faire:
- Soit pour ne pas écrire dans "Feuil1" au fur et à mesure que CIBLE se remplit
- Soit pour récupérer les données filtrées dans un tableau sans trop interagir avec la feuille "DATA"
- Soit pour dimensionner le range CIBLE sans le faire interagir avec une feuille Excel


Voilà, j'espère que vous saurez m'aider et que je n'ai pas été trop compliqué dans la description de mon problème...!

Merci à vous et bonne journée !

Rémi
A voir également:

1 réponse

Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
13 juin 2017 à 17:25
Bonjour,

Difficile de tout comprendre sans avoir le code sous les yeux.

Mais bon, si votre feuille 1 se remplit alors qu'elle ne devrait pas, c'est sans doute que vous avez oublié de préciser les feuilles impactées dans le code.

Vous écrivez :

Set CIBLE=Sheets("Feuil1").Range("A1:BH1000") 


Oui mais, si vous ne voulez pas que la feuille 1 se remplisse et que vous mettez une range sur la feuille 1 pour cible, il y a une incohérence...

Ou alors je n'ai pas vraiment compris. Un exemple de code ou de fichier serait clairement le bienvenu.
0
RemRob Messages postés 3 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 13 juin 2017
13 juin 2017 à 17:32
Je n'ai pas donné de code car il est beaucoup trop long et complexe (beaucoup de données s'entremêlent...)

S'il y a une range, il y a forcément remplissage de la feuille? (je ne maîtrise pas bien les range...)
Si oui, comment pourrais-je donner une taille de 60 colonnes * 1000 lignes à ma range sans lui attribuer une feuille? (c'est à dire l'initialiser en étant vide, sans qu'elle soit liée à une feuille Excel)
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61 > RemRob Messages postés 3 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 13 juin 2017
13 juin 2017 à 17:42
Pour la petite explication, lorsque vous définissez une range, vous affectez à l'objet CIBLE la partie de la feuille 1 allant de la colonne A à BH et de la ligne 1 à 1000. A partir du moment où vous écrivez une Range dans le code, vous parlez forcément d'un "endroit" sur un classeur Excel.

Du coup logique, je remplis mon objet, cela remplit en fait cette partie du classeur.

Pour une question de pure simplicité, pourquoi ne créez vous pas une feuille disons "temporaire" le temps d'exécuter le script? Elle pourra contenir les données que vous avez besoin de traiter puis vous supprimez la feuille au pire des cas avec le même script.

Cordialement.
0
RemRob Messages postés 3 Date d'inscription mardi 13 juin 2017 Statut Membre Dernière intervention 13 juin 2017
13 juin 2017 à 17:54
Merci pour cette explication.
En effet, c'est une solution, apparemment la meilleure !

Je vous remercie pour votre rapidité et vos explications.

Bonne fin de journée !

Rémi
0