Transfert de donnees dans un tableau

filouj

XLDnaute Nouveau
Bonjour à tous,

Je débute dans l'utilisation de macro et j'ai deux soucis sur l'une d'elle. A mon avis ce n'est pas un gros problème, néanmoins je ne m'en sort pas.
Je souhaite transférer des données d'un tableau vers un autre tableau. Les tableaux sont sur une même feuille.
Premièrement je transforme le tableau1 afin que chaque donnée utile puisse être dans des cellules distinctes dans un tableau2.
Ensuite Ligne par ligne je compare les données du tableau2 avec le tableau3 a renseigner ( pour éviter les doublons). Si les données n'existent pas je crée une nouvelle ligne sinon j'impute le nombre d'articles à la ligne déjà existante (dans le tableau 3)

Premier problème:
Lorsque je créé une nouvelle ligne, les données ne sont pas transférées. Une ligne se créée mais avec aucune valeur.

Deuxième problème:
Lorsque je créé une ligne, je dois imputer à cette ligne une épaisseur. Pour cela j'utilise la fonction Find dans une boucle IF. Or cela ne me renvoie aucun résultat.

Je ne pense pas être très clair. Pour plus de clarté je mets le fichier.

Merci d'avance pour l'aide
 

Pièces jointes

  • duct NBC.xlsm
    94.3 KB · Affichages: 43
  • duct NBC.xlsm
    94.3 KB · Affichages: 43
  • duct NBC.xlsm
    94.3 KB · Affichages: 43

info69

XLDnaute Nouveau
Re : Transfert de donnees dans un tableau

Bonjour filouj, bonjour le forum,

L'analyse de votre code est assez complexe compte tenu du nommage des variables et du manque de commentaire.
Aussi je me suis permis d'écrire une version la plus documentée possible.

Attention, il y a une faille: il faudrait vérifier avant le lancement de l'intégration des données que toutes les épaisseurs existent dans le tableau de destination.

En espérant que ce code sera pour vous une source d'inspiration ;)
Nous faire part de vos commentaires et questions...
++
 

Pièces jointes

  • duct NBC.xlsm
    106.2 KB · Affichages: 47
  • duct NBC.xlsm
    106.2 KB · Affichages: 61
  • duct NBC.xlsm
    106.2 KB · Affichages: 58

filouj

XLDnaute Nouveau
Re : Transfert de donnees dans un tableau

Bonjour info 69, bonjour à tous

Merci beaucoup d'avoir pris le temps de m'aider.
Le code fonctionne parfaitement. Je n'aurai jamais pu écrire ce que vous avez fait.
Juste pour information j'ai quelques questions pour mieux comprendre la macro:

- Dans le paragraphe de récupération des données, vous faites appel à Redim preserve. Quel est sa fonction?
- Dans le paragraphie insertdata, lorsque vous optimisez la gestion des thickness, je n'arrive pas à comprendre cette ligne de code:
Call lcThickToCol.Add(zPosThickness.Column, CStr(Format(zPosThickness.Value, "#0.#0")))

Sinon, au niveau de la faille, comme c'est souvent les mêmes valeurs, je pense que cela ne devrait pas poser problème.

Encore merci
 

info69

XLDnaute Nouveau
Re : Transfert de donnees dans un tableau

Bonjour filouj,

Content que cela réponde à ton besoin.


- Dans le paragraphe de récupération des données, vous faites appel à Redim preserve. Quel est sa fonction?

Redim permet de modifier les dimensions d'un tableau. Le mot clef preserve permet de conserver les données du tableau. Classiquement quand on déclare un tableau "dynamique", avant de le remplir il faut indiquer ses dimensions.
Dans ce cas (mon code), le mot clef preserve ne sert à rien puisque le tableau était vide.
Bien vu! :p

- Dans le paragraphie insertdata, lorsque vous optimisez la gestion des thickness, je n'arrive pas à comprendre cette ligne de code:
Call lcThickToCol.Add(zPosThickness.Column, CStr(Format(zPosThickness.Value, "#0.#0")))i

C'est une astuce, je charge dans une collection, les relations entre les épaisseurs et les numéro de colonnes de ces épaisseurs. En effet, dans la boucle j'ai constamment besoin à partir d'une valeur d'épaisseur de déterminer le n° de colonne associé.
Aussi la collection me permet de gérer cette relation. Les valeurs stockées sont le numéro de colonne et la clef de recherche c'est l'épaisseur.
Mais, MAIS, la clef de recherche doit être une chaine, aussi je formate la valeur (double) de l'épaisseur sous forme d'une chaine.
Dans ce cas, le CSTR() ne sert à rien car le Format renvoi déjà une chaine. Bien vu! ;)

(je fais trop de programmation défensive... c'est un peu mon tord)

C'est pour ça que je suis sur ce forum, c'est pour m'améliorer en rendant service...
++
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz