Signaler

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

Posez votre question RemRob 3Messages postés mardi 13 juin 2017Date d'inscription 13 juin 2017 Dernière intervention - Dernière réponse le 13 juin 2017 à 17:54 par RemRob
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
Utile
+0
plus moins
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.
RemRob 3Messages postés mardi 13 juin 2017Date d'inscription 13 juin 2017 Dernière intervention - 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)
Répondre
Kuartz 836Messages postés vendredi 13 février 2015Date d'inscription 1 septembre 2017 Dernière intervention - 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.
Répondre
RemRob 3Messages postés mardi 13 juin 2017Date d'inscription 13 juin 2017 Dernière intervention - 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
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !