Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fusion de deux feuilles Excel

9 réponses
Avatar
pascal913
Bonjour tout le monde !!!

Je viens =E0 l'instant de m'inscrire sur ce forum qui m'a l'air bien
sympathique !

Voil=E0, je dispose d'Access 97 et de Excel 2000. Je pose ma question
sur ce forum car on n'a pas =E9t=E9 capable de me r=E9pondre sur un forum
d'Access (trop dur?). J'esp=E8re donc que j'aurais un peu plus de chance
avec vous ! Je n'utilise Access que depuis moins d'un mois, donc aie
aie aie !! je n'y comprends pas grand chose ( la quasi totalit=E9 de mes
programmes ne sont pas de moi ).

Sous Access 97, j'ai une table avec une dizaine de champs, un
formulaire bas=E9 sur cette table qui me permet d'entrer de nouveaux
enregistements dans ma base de donn=E9es. J'ai r=E9ussi, par
l'interm=E9diaire d'une macro (qui se base sur une requete qui fait un
filtre), qui elle-m=EAme est raccord=E9e =E0 un bouton, =E0 envoyer le
r=E9sultat de mes deux filtres sur deux feuilles Excel diff=E9rentes,
jusque l=E0 pas trop de difficult=E9s.
Mais mon probl=E8me, c'est l=E0 que je bloque depuis un bon petit moment
maintenant, je voudrais prendre le contenu d'une des deux feuilles pour
le mettre sur l'autre feuille, et =E7a, par le biais d'une macro
raccord=E9e =E0 un bouton (que ce soit sur Access ou sur Excel, peu
importe) pour faciliter le travail du personnel, en automatisant la
chose.

J'esp=E8re que je me suis pas trop mal expliqu=E9, si vous avez le
moindre doute, n'h=E9sitez pas =E0 me poser des questions pour
d'=E9ventuelles pr=E9cisions.

Je remercie d'avance tout ceux qui s'int=E9resseront =E0 mon probl=E8me.

9 réponses

Avatar
anonymousA
Bonjour,

on suppose que tes 2 feuilles appartiennent au même fichier et
qu'elles s'appellent Feuil1 et Feuil2. on suppose que en Feuil1 et en
Feuil2, on puisse déterminer la réelle plage utilisée en utilisant
UsedRange et on suppose qu'on copie les infos de Feuil2 en Feuil1 et
que en Feuil2 ii y a une ligne d'entete qu'on ne veut pas copier en
Feuil1, alors

Worksheets("Feuil2").UsedRange.Offset(1, 0).Copy
Worksheets("Feuil1").Range("A" &
Worksheets("Feuil1").UsedRange.Rows.Count + 1)

fera le travail demandé

A+

pascal913 wrote:
Bonjour tout le monde !!!

Je viens à l'instant de m'inscrire sur ce forum qui m'a l'air bien
sympathique !

Voilà, je dispose d'Access 97 et de Excel 2000. Je pose ma question
sur ce forum car on n'a pas été capable de me répondre sur un forum
d'Access (trop dur?). J'espère donc que j'aurais un peu plus de chance
avec vous ! Je n'utilise Access que depuis moins d'un mois, donc aie
aie aie !! je n'y comprends pas grand chose ( la quasi totalité de mes
programmes ne sont pas de moi ).

Sous Access 97, j'ai une table avec une dizaine de champs, un
formulaire basé sur cette table qui me permet d'entrer de nouveaux
enregistements dans ma base de données. J'ai réussi, par
l'intermédiaire d'une macro (qui se base sur une requete qui fait un
filtre), qui elle-même est raccordée à un bouton, à envoyer le
résultat de mes deux filtres sur deux feuilles Excel différentes,
jusque là pas trop de difficultés.
Mais mon problème, c'est là que je bloque depuis un bon petit moment
maintenant, je voudrais prendre le contenu d'une des deux feuilles pour
le mettre sur l'autre feuille, et ça, par le biais d'une macro
raccordée à un bouton (que ce soit sur Access ou sur Excel, peu
importe) pour faciliter le travail du personnel, en automatisant la
chose.

J'espère que je me suis pas trop mal expliqué, si vous avez le
moindre doute, n'hésitez pas à me poser des questions pour
d'éventuelles précisions.

Je remercie d'avance tout ceux qui s'intéresseront à mon problème.


Avatar
pascal913
Je te remercie anonymousA pour avoir pris du temps pour me répondre.
C'est sympa.

Le problème est que je n'ai pas mes deux feuilles sur le même fichier
mais sur deux fichiers différents, alors, comment fait on à partir
d'Access pour faire afficher les résultats de mes deux filtres sur
deux feuilles différentes dans un même fichier comme tu me le
préconises? A ce moment là, je pourrais écrire le code que tu m'as
donné, mais il faut que je l'écrive où ce code (désolé) ? Je vous
rappelle que je n'utilise que depuis très peu de temps, alors..... si
vous pourriez, dans la mesure su possible, être un peu plus précis
s'il vous plaît ?

Merci.
Avatar
anonymousA
Depuis ACCESS, tu ouvres une connexion à Excel.Compte tenu de ce qu'il
y a ci-dessous, il te faut une référence dans Access à Excel
(Outils/Références). Puis on copie du classeur appelé toto1 vers le
classeur appelé toto2
On suppose bien sur qu'à l'instant où tourne cette proc les ficheirs
toto1 et toto2 sont ouverts dans la même session Excel

Set MyXL = GetObject(, "Excel.Application")
Set wbk1 = MyXL.Workbooks("toto1.xls")
Set wbk2 = MyXL.Workbooks("toto2.xls")
lignewbk2 = wbk2.Sheets("Feuil1").UsedRange.Rows.Count
wbk1.Sheets("Feuil1").UsedRange.Offset(1, 0).Copy
wbk2.Sheets("Feuil1").Range("A" & lignewbk2 + 1)
Set MyXL = Nothing

A+

pascal913 wrote:
Je te remercie anonymousA pour avoir pris du temps pour me répondre.
C'est sympa.

Le problème est que je n'ai pas mes deux feuilles sur le même fichier
mais sur deux fichiers différents, alors, comment fait on à partir
d'Access pour faire afficher les résultats de mes deux filtres sur
deux feuilles différentes dans un même fichier comme tu me le
préconises? A ce moment là, je pourrais écrire le code que tu m'as
donné, mais il faut que je l'écrive où ce code (désolé) ? Je vo us
rappelle que je n'utilise que depuis très peu de temps, alors..... si
vous pourriez, dans la mesure su possible, être un peu plus précis
s'il vous plaît ?

Merci.


Avatar
pascal913
anonymousA wrote:
Depuis ACCESS, tu ouvres une connexion à Excel.Compte tenu de ce qu'il
y a ci-dessous, il te faut une référence dans Access à Excel
(Outils/Références). Puis on copie du classeur appelé toto1 vers le
classeur appelé toto2
On suppose bien sur qu'à l'instant où tourne cette proc les ficheirs
toto1 et toto2 sont ouverts dans la même session Excel


Tu risques de péter un plomb mais je n'arrive pas à faire ce que tu
me demandes, en anglais c'est pas évident; je n'arrive pas à "ouvrir
une connexion à Excel, puisfaire outils/références, ect..."
Je suis désolé....

Set MyXL = GetObject(, "Excel.Application")
Set wbk1 = MyXL.Workbooks("toto1.xls")
Set wbk2 = MyXL.Workbooks("toto2.xls")
lignewbk2 = wbk2.Sheets("Feuil1").UsedRange.Rows.Count
wbk1.Sheets("Feuil1").UsedRange.Offset(1, 0).Copy
wbk2.Sheets("Feuil1").Range("A" & lignewbk2 + 1)
Set MyXL = Nothing
.


Avatar
anonymousA
Ce que je te propose de faire c'est d'aller dans le menu principal de
VBE de chercher un sous menu qui en francais s'appelle Outils mais en
Anglais doit logiquement se nommer Tools et de rechercher ensuite dans
ce sous-menu un controle qui doit se nommer Références en Français
et en Anglais References ( I presume) .
Une fois cliqué sur ce controle , il faut dans le combobox qui t'est
présenté que tu cherches une bibliothèques d'objets dont le nom est
vraisemblablement Microsoft Excel 9.0 Object Library ( ou un N° au
delà de 9 si ta version est plus récente ou en deçà si ta version
d'Excel est < 2000) .
Une fois que tu as fait ca, tu es paré pour utiliser la procédure que
je t'ai envoyée. Cette procédure peut être stockée dans un module
de la BDD d'ACCESS si tu as ACCESS 2000 ou + et dans un formulaire si
tu as ACCESS 97 ( je ne me rappelle plus si sous 97 il y avait déjà
des modules ou pas ) . Ensuite, il te suffit d'avoir lancé tes filtres
qui créent tes fichiers sous Excel et de s'assurer que tes 2 fichiers
Excel sont ouverts en même temps car compte tenu de la proc que je
t'ai fait parvenir , je ne m'inquiète pas d'aller les ouvrir, je
considère qu'ils le sont déjà.
Enfin, il te faudra lancer la procédure mais ca je suppose que tu sais
faire .

A+

pascal913 wrote:
anonymousA wrote:
Depuis ACCESS, tu ouvres une connexion à Excel.Compte tenu de ce qu'il
y a ci-dessous, il te faut une référence dans Access à Excel
(Outils/Références). Puis on copie du classeur appelé toto1 vers le
classeur appelé toto2
On suppose bien sur qu'à l'instant où tourne cette proc les ficheirs
toto1 et toto2 sont ouverts dans la même session Excel


Tu risques de péter un plomb mais je n'arrive pas à faire ce que tu
me demandes, en anglais c'est pas évident; je n'arrive pas à "ouvrir
une connexion à Excel, puisfaire outils/références, ect..."
Je suis désolé....

Set MyXL = GetObject(, "Excel.Application")
Set wbk1 = MyXL.Workbooks("toto1.xls")
Set wbk2 = MyXL.Workbooks("toto2.xls")
lignewbk2 = wbk2.Sheets("Feuil1").UsedRange.Rows.Count
wbk1.Sheets("Feuil1").UsedRange.Offset(1, 0).Copy
wbk2.Sheets("Feuil1").Range("A" & lignewbk2 + 1)
Set MyXL = Nothing
.




Avatar
pascal913
Bonjour à tous et à toi anonymousA !

Etant donné que tu m'as envoyé hier le message juste avant que je
parte, et que je dispose pas d'Access 97 chez moi, je n'ai donc pas
pu tester ce que tu m'as gentiment envoyé.

Je viens donc à l'instant d'essayer de faire ce que tu m'as dis,
mais le souci est que je peux accéder à Tools/References uniquement
si je choisis une procédure évènementielle dans les propriétés de
mon form ; laquelle dois-je choisir ? où est-ce que je fais fausse
route ? Dans les deux cas, peux-tu me préciser stp?
Après ça j'ai choisis la library. Je te rappelle que sous 97 il y a
les modules. De plus tu me demandes si je sais lancer une procédure ?
mais si ma procédure est dans un module que j'intègre dans ma
macro, ça se fera automatiquement ( je suppose).

Merci d'avance pour ton aide.
@++
Avatar
anonymousA
Bon,

sur ACCESS97, j'ai plus beaucoup de souvenirs.Donc je ne sais plus s'il
faut absolument utiliser un evenement du Form pour acceder à
Tools/references. Ceci dit même si c'est le cas, tu peux utiliser
l'evenement Load et ne rien mettre comme instructions dans la
procédure ce qui ne fera aucun mal à ton formulaire.
Ce que je voulais dire pour lancer la procédure, c'est
qu'effectivement si celle-ci se trouve dans un module et qu'elle est de
type Public par défaut alors effectivement elle sera appelable depuis
n'importe quel formulaire.
En dehors de ca, il n'y a aucune raison que ce que je t'ai indiqué ne
marche pas car comme pratiquement à chaque fois que je communique une
proc , je l'ai essayée et elle fonctionne ( en tout cas , au moins
dans les conditions de mon micro et de mon logiciel) .

A+

pascal913 wrote:
Bonjour à tous et à toi anonymousA !

Etant donné que tu m'as envoyé hier le message juste avant que je
parte, et que je dispose pas d'Access 97 chez moi, je n'ai donc pas
pu tester ce que tu m'as gentiment envoyé.

Je viens donc à l'instant d'essayer de faire ce que tu m'as dis,
mais le souci est que je peux accéder à Tools/References uniquement
si je choisis une procédure évènementielle dans les propriétés de
mon form ; laquelle dois-je choisir ? où est-ce que je fais fausse
route ? Dans les deux cas, peux-tu me préciser stp?
Après ça j'ai choisis la library. Je te rappelle que sous 97 il y a
les modules. De plus tu me demandes si je sais lancer une procédure ?
mais si ma procédure est dans un module que j'intègre dans ma
macro, ça se fera automatiquement ( je suppose).

Merci d'avance pour ton aide.
@++


Avatar
pascal913
re

bon je n'arrive toujours pas à faire ce que tu me dis. Mais bon c'est
pas trop grave, je ferais des copier coller.

J'ai un autre souci : sous excel, j'ai fais une macro qui devrait me
faire obtenir, une fois terminée, la mise en page que je souhaite
avoir (placement des colonnes, taille, couleur....).
Le problème est que, quand je la lance depuis une macro d'Access97 (en
appelant un module, où j'ai copié le code de la macro d'Excel), il me
dit que toute mes lignes de code sont fausses (CutCopyMode .....). Et
je ne comprends pas pourquoi. Que faut-il que je fasse pour obtenir ce
que je souhaite ??

MERCI
Avatar
anonymousA
Je ne suis pas sur d'avoir été suffisamment clair.Quand tu es en
ACCESS, les méthodes et propriétés que tu utilises en VBA sont ceux
d'ACCESS. Si tu veux piloter l'application Excel, il faut instancier (
au sens informatique du terme) Excel.
C'est ce qu'on fait quand je te disais d'écrire Set MyXL=
GetObject(,"Excel.Application").
Il n'est pas obligatoire de référencer la bibilothèque d'objets mais
c'est très pratique pour pouvoir d'une part utiliser toutes constantes
de VBA Excel et d'autre part pour bénéficier de l'Intellisense
lorsqu'on a déclaré les varaibles comme étant des variables de type
Excel.
Une fois réalisée l'instanciation , l'objet MyXL est formellement
l'équivalent de l'objet Application du modèle d'objets Excel. Dans
ces conditions , tu peux te mettre à parler VBA Excel pour toutes les
variables dépendant de MyXL et piloter Excel avec le modèle d'objets
Excel.

si tu veux te passer de référencer la bibliothèque , il faut écrire


Set MyXL = GetObject(, "Excel.Application")
Set wbk1 = MyXL.Workbooks("toto 1.xls")
Set wbk2 = MyXL.Workbooks("toto 2.xls")
lignewbk1 = wbk1.Sheets(1).Range("A65536").End(3).Row
lignewbk2 = wbk2.Sheets(1).UsedRange.Rows.Count
wbk1.Sheets(1).UsedRange.Interior.colorindex = 3 'ici on colorie la
plage de toto 1
wbk1.Sheets(1).UsedRange.Offset(1, 0).Copy wbk2.Sheets(1).Range("A" &
lignewbk2 + 1)
Set MyXL = Nothing

A+

pascal913 wrote:
re

bon je n'arrive toujours pas à faire ce que tu me dis. Mais bon c'est
pas trop grave, je ferais des copier coller.

J'ai un autre souci : sous excel, j'ai fais une macro qui devrait me
faire obtenir, une fois terminée, la mise en page que je souhaite
avoir (placement des colonnes, taille, couleur....).
Le problème est que, quand je la lance depuis une macro d'Access97 (en
appelant un module, où j'ai copié le code de la macro d'Excel), il me
dit que toute mes lignes de code sont fausses (CutCopyMode .....). Et
je ne comprends pas pourquoi. Que faut-il que je fasse pour obtenir ce
que je souhaite ??

MERCI