VBA Liaison entre deux classeurs

Bonjour.

J'espère que mon "usine a gaz" ne fera pas fuir tous le monde. Mais bon ce n'est pas simple a suivre.

Ce n'est pas simple non plus a expliquer … mais ça fonctionne en partie … et la partie qui fonctionne c'est top !!!

Il me faudrait l'ensemble.

Le VBA je ne savais même pas que ça existait il y a 15 jours … donc vous vous doutez bien que ce n'est pas moi qui ai fait ça.

Ceci est le regroupement de résultat journalier (fichier avec la date) et un fichier avec un résumé mensuel qui fonctionne en VBA.

Fichier (recap) qui fonctionne sur la première partie (denrée), et qui me donne entière satisfaction, mais la partie (richesse) qui pose problème.

Je me suis rendu-compte du problème quand j'ai commencé a l'utilisé (il aurait certainement été plus simple de le faire correctement la première fois).

Les deux cotés "denrée" et "richesse" on été crée d'une manière identique, mais ils ne le sont pas, et c'est là mon soucis.

Si quelqu'un peut me faire avancer le truc, cela serait sympa. J'ai essayé d'expliquer le fonctionnement en bas de la feuille 070114.

Merci a vous.

23070114.zip (8.16 Ko)
25recap.zip (22.85 Ko)

Bonjour,

Tu indiques que les résultats de chaque jour sont classés avec un indice "1" ou "2" (denrée).

Cela se traduit par un collage à un emplacement correspondant à cet indice dans la feuille denrée : café 1 ou café 2 par exemple.

Par contre, cette logique n’est pas respectée pour la feuille richesse. Les résultats de chaque jour sont classés avec 3 indices "2", "3" ou "4" alors qu’il n’existe qu’un emplacement dans la feuille richesse (il n’y a pas fer2, fer3 ou fer4).

Dans la proposition jointe, le calcul du numéro de ligne où doit s’effectuer le collage est différencié selon qu’il s’agit de denrée ou richesse

If colS < 7 Then
    ligD = (ligS - 1) * 6 + colS + datas(ligS, colS + 1)
    Set shD = ThisWorkbook.Sheets("denrée")
Else
    ligD = (ligS - 1) * 6 + (colS - 7) / 2 + 2
    Set shD = ThisWorkbook.Sheets("richesse")
End If
shD.Cells(ligD, colD) = datas(ligS, colS)
31recap.zip (29.27 Ko)

A+

Merci pour ta réponse ... cela a l'air de fonctionner au top ...

Je teste ça.

Bon après tests ... ça donne le résultat escompté.

Tu as mis combien de temps pour ça ?

Si je dois remplir les lignes "richesse" 5 6 7 ... 11 12 13 ... 17 18 19 ... qu'est que je dois remplir comme commande ?

C'est quoi la fonction qui "transfert" les données d'un classeur a un autre ?

Histoire de comprendre un peu ...

Merci encore ... mais j'attends un peu d'info de ta part.

Bonjour,

Tu as mis combien de temps pour ça ?

Je n’ai pas compté. D’après moi, pas très longtemps. D’après mon entourage, beaucoup trop.

Si je dois remplir les lignes "richesse" 5 6 7 ... 11 12 13 ... 17 18 19 ... qu'est que je dois remplir comme commande ?

Pour renseigner la feuille "richesse", on calcule le numéro de ligne avec l’instruction

ligD = (ligS - 1) * 6 + (colS - 7) / 2 + 2

cols indique la position de la colonne de l’élément (fer, or, cuivre) dans la plage correspondant à denrée / richesse dans le tableau datas, soit

fer > colS = 7;

Or > colS = 9;

Cuivre > colS = 11

Si tu ajoutes 3 éléments, leur position respective sera 13, 15, 17 dans le tableau datas.

Pour adapter le code, tu devras modifier :

- Le tableau datas pour prendre en compte ces nouvelles colonnes

datas = shS.[J8].Resize(derlig - 7, 18)

- Et la boucle

For colS = 1 To 17 Step 2

C'est quoi la fonction qui "transfert" les données d'un classeur a un autre ?

La copie est réalisée par la procédure "recup", et plus particulièrement par l’instruction

shD.Cells(ligD, colD) = datas(ligS, colS)

A+

Hello les gens.

Je n'avais pas cloturé ... car je savais que j'aurai a finir. Pour le moment tous fonctionne pour le mieux.

Pour remplir mon dernier créneau dans richesse j'ai ajouter une colonne de plus, a savoir "eau"

J'ai essayé comme dans l'explication de procédure ... ça fonctionne a moitié, les résultats "eau" sont dans les colonnes "eau" … mais toujours sur la ligne du bas.

Pas étonnant car je n'ai pas "déclarer" a Vba qu'il y avait des trucs en plus (j'ai fais les modifs que j'avais demandé sur mon dernier message)

Mais vu que je ne vois pas ou lui dire qu'il y a deux colonnes en plus ... ?

La ligne :

shD.Cells(ligD, colD) = datas(ligS, colS)

elle est déjà dans le vba ... que modifier ?

Merci.

17070114.zip (5.90 Ko)
7recap-2.zip (30.18 Ko)

Bonjour,

Si tu as besoin d'explications complémentaires, n'hésites pas à demander

A+

26recap-2.zip (30.91 Ko)

J'avais oublier de cloturer.

Merci encore pour ton aide. Cela fonctionne très bien.

Rechercher des sujets similaires à "vba liaison entre deux classeurs"