Rechercher : dans
Par :

BESOIN D'AIDE URGENTE MACROS EXCEL 2003

Dernière réponse le 16 nov 2009 à 11:12:18 itreal, le 6 nov 2009 à 12:20:35 
 Signaler ce message aux modérateurs

Bonjour,
je viens vers vous pour trouver une solution à mon GROS problème pour créer une macro sur Excel.
Je dois faire en sorte de rapatrier des données de quatre tableaux excel à ramener sur un seul.
Deux d'entre eux ont exactement les même colonnes et deux autres non.
Je dois donc pouvoir sélectionner les colonnes que je veux ramener et cela doit se faire après automatiquement, les données à la suite les unes des autres.
On m'a dit que je pouvais faire ça avec une macro qui fait une boucle... après je comprenais plus.
Mon problème est que l'on m'a embaucher pour ce poste et que j'ai un mois pour réussir ça ou je pense que j'ai de grande chance de dégager.
En espérant que quelqu'un me vienne en aide.

Configuration: Windows XP
Excel 2003

1

pijaku, le 6 nov 2009 à 14:20:32

Bonjour,
Tout d'abord ces macros ne sont pas de moi... Récupérées sur Internet peut être ici. Désolé pour les sources, mais franchement j'aurais du les noter.

Bon c'est une bonne piste pour toi, afin de ne pas perdre ton job...
Tes 4 fichiers doivent être dans un même répertoire. Rien d'autre dans ce répertoire.
La macro te demande :
1- le répertoire
2- l'extension de tes fichiers (taper xls pour fichiers excel)
3- pour chaque fichier ouvert : demande de sélectionner la plage à copier.

Le résultat apparait sur le document avec en gras rouge le chemin + nom du fichier copié et en dessous ce que vous aurez demandé.
Bon courage

A oui le lien : http://cjoint.com/?lgonl4agMi Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ­ou est le problème? --

Répondre à pijaku

2

itreal, le 6 nov 2009 à 14:37:24

Déjà merci pour cette réponse aussi rapide.
Le petit problème que je n'ai pas précisé c'est que ces fichiers ne proviennent pas du même pc.
Ils proviennent de quatre pc différents, mais sur le même réseau, seul les répertoires changent.
De plus, même si je pense qu'avec votre réponse, je me rapproche de la solution, il faudrait que cela se fasse automatique dès l'ouverture du tableau excel "cible".
Car ce tableau qui récupère toutes les données est prévus pour mon responsable, qui doit en un seul fichiers voir toutes les données.
J'espère que je suis clair (je suis pas sur lol) et encore merci de votre aide.

Répondre à itreal

3

pijaku, le 6 nov 2009 à 14:53:50

C'est encore plus facile... Les chemins d'accès et noms de fichiers sont fixes? Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ­ou est le problème? --

Répondre à pijaku

4

pijaku, le 6 nov 2009 à 15:16:12

Le lien : http://cjoint.com/?lgplEwJbo4

Démarches :
1- Ouvrir le classeur autoriser les macros
2- ALT + F11
remplacer :
- les 2 NomFic par le chemin complet + nom + extension du fichier 1 à ouvrir (un exemple est indiqué)
- les 2 NomFic2 par le chemin complet + nom + extension du fichier 2 à ouvrir (un exemple est indiqué)
etc jusqu'à NomFic4
- remplacer les nom du classeur 1, 2, 3, 4 par les noms + extension des fichiers à ouvrir
- remplacer les "A1:G5000" par la plage du fichier source concerné par la copie.
- enlever toutes les ' de début de lignes
- fermer VBA avec la croix
- enregistrer le fichier
le fermer et l'ouvrir... Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

5

itreal, le 6 nov 2009 à 16:49:27

Merci beaucoup pour votre aide, j'ai pris le fichier et les démarches à suivre ; je vais les tester chez moi et je donnerais des nouvelles dès lundi.

Répondre à itreal

6

Itreal, le 9 nov 2009 à 11:04:12

Bonjour,
je n'arrive pas à faire marcher cette macro.
Je ne sais pas si je rentre bien les données, j'ai mis C:\Documents and Settings\rperez\Mes documents\essai\base boulot1.xls" et ainsi de suite pour les autres classeurs.
J'ai mis des copies des classeurs excel sur mes documents pour faire des essais.
Après je ne comprends pas "- remplacer les "A1:G5000" par la plage du fichier source concerné par la copie. "
Si vous pouviez encore m'aider.
Merci

Répondre à Itreal

7

pijaku, le 9 nov 2009 à 11:10:33

Bonjour,
remplacer les "A1:G5000" En fait, dans vos 4 fichiers vous ne voulez pas copier coller les 256 colonnes et quelques 65000 lignes. Vous ne voulez qu'une plage de cellules. C'est donc par cette plage que vous devez remplacer dans la macro les "A1:G5000"... Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

8

itreal, le 9 nov 2009 à 11:48:01

Ben en fin de compte je ne sais pas, car les tableaux que je dois importer sur ma feuille, sont des tableaux qui sont alimentés tous les jours.
Et j'espère que j'ai mis au on endroit la cible de mon tableau base boulot1.xls

Répondre à itreal

9

pou pouille, le 9 nov 2009 à 12:16:37

Bonjour, peut etre essayer quelquechose dans ce genre ( cela compte le nombre de ligne dans le tableau)
dim Nb_lignes as variant
Nb_lignes=cells(rows.count,1).end(xlup).row
'remplacer "A1:G5000" par :
"A1:G" & Nblignes la théorie et la pratique c'est la même chose...enfin en théorie

Répondre à pou pouille

10

pijaku, le 9 nov 2009 à 12:17:01

Alors je viens de voir un erreur sur la macro que je t'ai donné... Pour que la plage soit variable, les tableaux étant alimentés tous les jours, je te l'ai refaite et ça donne :
Sub importer_donnees ()
Dim derlig as Integer, dercol as integer
ActiveSheet.Range("A2:AZ65536").ClearContents
Workbooks.Open Filename:=NomFic '(exemple : "C:\Documents and Settings\Bureau\Nouveau dossier\augmentation.xls")
With Workbooks("ouvrir documents.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = NomFic
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks(Nom du classeur exemple : "augmentation.xls").ActiveSheet.Range(Cells(1, 1),Cells(derlig, dercol)).Copy Workbooks("ouvrir documents.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Workbooks(Nom du classeur).Close

Workbooks.Open Filename:=NomFic2 '(exemple : "C:\Documents and Settings\Bureau\Nouveau dossier\augmentation.xls")
With Workbooks("ouvrir documents.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = NomFic2
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks(Nom du classeur exemple : "augmentation.xls").ActiveSheet.Range(Cells(1, 1),Cells(derlig, dercol)).Copy Workbooks("ouvrir documents.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Workbooks(Nom du classeur2).Close

Workbooks.Open Filename:=NomFic3 '(exemple : "C:\Documents and Settings\Bureau\Nouveau dossier\augmentation.xls")
With Workbooks("ouvrir documents.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = NomFic3
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks(Nom du classeur exemple : "augmentation.xls").ActiveSheet.Range(Cells(1, 1),Cells(derlig, dercol)).Copy Workbooks("ouvrir documents.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Workbooks(Nom du classeur3).Close

Workbooks.Open Filename:=NomFic4 '(exemple : "C:\Documents and Settings\Bureau\Nouveau dossier\augmentation.xls")
With Workbooks("ouvrir documents.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = NomFic4
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks(Nom du classeur exemple : "augmentation.xls").ActiveSheet.Range(Cells(1, 1),Cells(derlig, dercol)).Copy Workbooks("ouvrir documents.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Workbooks(Nom du classeur4).Close
End Sub
Et j'espère que j'ai mis au on endroit la cible de mon tableau base boulot1.xls
Peu importe ou se trouve ton/tes fichiers. Le pricipal étant d'indiquer dans la macro (en gras ci dessus) les bons chemins de tes 4 fichiers.
Démarches :
- Ouvre un classeur vide, enregistrer sous : ouvrir documents.xls
- copier/ coller la macro ci dessus dans un module (ALT+F11, Insertion/Modules)
- modifier les chemins des 4 fichiers à "importer"
- Fermer la fenêtre Visual Basic
- Enregistrer
- Tester : ALT+F8 choisir : importer_donnees et "exécuter" Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

11

itreal, le 9 nov 2009 à 14:07:21

Je suis désolé mais je bloque, je sais pas si c'est parce que je panique mais j'y arrive pas.
Il arrête pas de me mettre "Erreur de compilation : Attendu : fin d'instruction"
Si vous avez encore un peu de temps, je vous mets une copie de ce que je fais.
En sachant que pour aller plus vite je n'ai pris que deux bases à importer qui se nomment "baseboulot1" et "baseboulot2" qui doivent être importer dans "baseboulot".

Sub importer_donnees()
Dim derlig As Integer, dercol As Integer
ActiveSheet.Range("A2:AZ65536").ClearContents
Workbooks.Open Filename:=NomFic C:\Documents and Settings\rperez\Mes documents\essai\baseboulot1.xls
With Workbooks("baseboulot.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = NomFic
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks baseboulot1.xls.ActiveSheet.Range(Cells(1, 1),Cells(derlig, dercol)).Copy Workbooks baseboulot.xls.Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Workbooks(Nom du classeur).Close

Workbooks.Open Filename:=NomFic2 C:\Documents and Settings\rperez\Mes documents\essai\base boulot2.xls
With Workbooks("baseboulot.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = NomFic2
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks baseboulot2.xls.ActiveSheet.Range(Cells(1, 1),Cells(derlig, dercol)).Copy Workbooks baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Workbooks(Nom du classeur2).Close

End Sub

Je suis désolé d'être aussi nul, mais encore merci de votre aide.

Répondre à itreal

12

pijaku, le 9 nov 2009 à 14:20:33

Essaye ceci :

Sub importer_donnees()
Dim derlig As Integer, dercol As Integer
ActiveSheet.Range("A2:AZ65536").ClearContents
Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot1.xls"
With Workbooks("baseboulot.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = NomFic
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks("baseboulot1.xls").ActiveSheet.Range(Cells(1, 1),Cells(derlig, dercol)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Workbooks("baseboulot1.xls").Close
Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\base boulot2.xls"
With Workbooks("baseboulot.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = NomFic2
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks("baseboulot2.xls").ActiveSheet.Range(Cells(1, 1),Cells(derlig, dercol)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Workbooks("baseboulot2.xls").Close
End Sub
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

13

itreal, le 9 nov 2009 à 14:42:14

MERCI BEAUCOUP, ça marche.
Si je peux abuser, comment je lui dit de ne pas prendre la première ligne, vu que c'est l'entête des tableaux ?

Répondre à itreal

16

pijaku, le 9 nov 2009 à 14:49:29

Explication dans cette ligne de code : Workbooks("baseboulot1.xls").ActiveSheet.Range(Cells(1, 1),Cells(derlig, dercol)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Cells(1, 1) représente la cellule A1. Donc on sélectionne la plage("A1:Dern_col,Dern_ligne"). Pour ne pas prendre en compte la 1ère ligne, il faut que la plage sélectionnée commence en A2 soit :
Workbooks("baseboulot1.xls").ActiveSheet.Range(Cells(2, 1),Cells(derlig, dercol)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

14

itreal, le 9 nov 2009 à 14:43:27

Et aussi, est ce que c'est possible qu'il exécute la macro dès l'ouverture de mon tableau ?

Répondre à itreal

17

pijaku, le 9 nov 2009 à 14:54:22

Oui c'est possible. Ouvres ton classeur, ALT + F11 dans la petite fenêtre en haut à droite tu vois :
Feuil1(Sheets1)
Feuil2(Sheets2)
Feuil3(Sheets3)
This Workbook
Double clic sur This Workbook
2 listes déroulantes : (général) et (déclarations)
en général choisir WorkBook
en déclarations : WorkBook_open
Le code suivant apparait :

Private Sub Workbook_Open()

End Sub
Placer entre ces deux lignes la macro écrite plus haut ou on aura préalablement enlevé les lignes :
"Sub importer_donnees ()"
et
"End Sub"
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

15

itreal, le 9 nov 2009 à 14:47:23

Arf!!!
Encore un souci, je vois qu'il ferme automatiquement mes tableaux sources lorsque je lance la macro.

Répondre à itreal

18

pijaku, le 9 nov 2009 à 14:55:33

Oui c'est fait exprès. Il n'y a pas d'utilité à les laisser ouvert...
Pour qu'ils ne se ferment pas il convient d'enlever les lignes :
WorkBooks("gnagnagna").Close Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

19

itreal, le 9 nov 2009 à 15:26:14

Un énorme merci à vous, je commence à me dire que je vais réussir à présenter un projet grâce à vous.
Est ce que je peux encore abuser et vous poser un problème supplémentaire ?
Les deux autres tableaux que je dois importer n'ont pas exactement les mêmes colonnes, est ce que je peux choisir les colonnes que je souhaite importer ?
Je croise les doigts pour que vous me disiez que c'est possible.

Répondre à itreal

20

pijaku, le 9 nov 2009 à 15:27:39

Oui

Comment souhaitez vous les sélectionner? Une boîte de dialogue s'ouvrant après l'ouverture du classeur concerné? Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ­ou est le problème? --

Répondre à pijaku

21

itreal, le 9 nov 2009 à 15:47:02

Ben en fin de compte, une fois que je lui aurait dit qu'elle colonne il devra importer (à la macro), ça ne changera plus.
Ces quatre tableaux devront s'importer automatiquement (vu que c'est mon boss qui aura la lecture de ce tableau final).

Répondre à itreal

22

pijaku, le 9 nov 2009 à 15:53:34

Le choix des colonnes se fait ici :
Workbooks("baseboulot1.xls").ActiveSheet.Range(Cells(1, 1),Cells(derlig, dercol)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Cells(1, 1) et Cells(derlig, dercol) constituent le point de départ et de fin de la plage sélectionnée.
Cells(1, 1) = A1
Cells(derlig, dercol) = dernière cellule en bas à droite de ta feuille

Si tu veux sélectionner les colonnes B et C (par exemple)
Cells(1, 3) = C1
Cells(derlig, 4) = dernière cellule non vide de la colonne D

Donc tu auras :
Workbooks("baseboulot1.xls").ActiveSheet.Range(Cells(1, 3),Cells(derlig, 4)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

23

itreal, le 9 nov 2009 à 15:59:01

Je vais tenter de faire tout ça, si ça marche, je ne demanderai qu'une dernière chose (j'espère).
Est il possible d'enlever le saut de ligne qu'il me met en début de chaque importation de tableau ?

Et encore une fois, vraiment MERCI BEAUCOUP pour tout.

Répondre à itreal

24

pijaku, le 9 nov 2009 à 16:00:31

Le saut de ligne était pour faire "propre".
Tu le trouveras ici : Workbooks("baseboulot1.xls").ActiveSheet.Range(Cells(1, 3),Cells(derlig, 4)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 0)
Tu peux remplacer le 2 par 1... Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

25

itreal, le 9 nov 2009 à 16:18:46

Ça marche très bien, sauf pour une chose.
C'est que j'ai essayé d'importer la colonne C (ça à marché) mais par contre il me la met que la colonne A, hors je voudrais qu'il me la mette sur la D (par exemple).

Et depuis que j'ai demandé un code pour qu'il lance la macro dès l'ouverture du fichier, il faut maintenant que je rentre toutes les modifications et dans "Module" et dans "Thisworkbook" ?

Répondre à itreal

26

pijaku, le 9 nov 2009 à 16:21:13

Non le module tu le supprimes, si tout ton code est dans This workbook...

Pour copier le contenu de la colonne C et le placer dans le fichier "destination" colonne D:

Workbooks("baseboulot1.xls").ActiveSheet.Range(Cells(1, 3),Cells(derlig, 3)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(2, 3)
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

27

itreal, le 9 nov 2009 à 16:33:40

Tout à l'air de marcher, je n'en reviens pas, je vais continuer à tester chez moi et je te tiendrais au courant.
Franchement c'est génial, mille fois merci.

Répondre à itreal

28

itreal, le 10 nov 2009 à 10:01:17

Bonjour,
je reviens encore vers toi parce qu'une chose ne fonctionne pas.
Je ne comprends pas, mais quand je mets ça :
"Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, 1)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 2), Cells(derlig, 2)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 1)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 4), Cells(derlig, 4)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 2)"
la première colonne se place bien en A, mais ma deuxième colonne se place en dessous en colonne B, au lieu d'à côté.
1
3
5
27/10/2009
27/10/2009
27/10/2009
Et je voulais savoir aussi si c'est possible de lui demander de trier automatiquement dans mon tableau d'importation sur la colonne que je souhaite ?

Répondre à itreal

29

pijaku, le 10 nov 2009 à 10:14:08

Salut,
'Fectivement... Pour remédier à cela il faut "mémoriser" le numéro de la ligne ou tu veux que tout se colle :
Dim numligne as integer
With Workbooks("baseboulot.xls").Sheets("Feuil1")
numlign = .Range("A65536").End(xlUp).Offset(1, 0).Row
End With
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, 1)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 2), Cells(derlig, 2)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("B" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 4), Cells(derlig, 4)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("D" & numligne)

si c'est possible de lui demander de trier automatiquement oui mais tout dépends quoi comment pourquoi? Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

30

itreal, le 10 nov 2009 à 10:38:05

Ça ne marche pas, j'ai mis comme ça :
"Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot3.xls"
Dim numligne As Integer
With Workbooks("baseboulot.xls").Sheets("Feuil1")
numlign = .Range("A65536").End(xlUp).Offset(1, 0).Row
End With
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, 1)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 2), Cells(derlig, 2)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("B" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 4), Cells(derlig, 4)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("C" & numligne)"

Sinon pour le tri, il faudrait qu'il me fasse un tri croissant sur la colonne A par exemple.

Répondre à itreal

32

pijaku, le 10 nov 2009 à 10:50:10

Ou cela bloque t'il? Quel est le message d'erreur?

Salut pou pouille,
Non il ne faut pas enlever ce point. En fait la macro, pour l'instant, a comme classeur actif "baseboulot3.xls". Or nous voulons "mémoriser" la dernière ligne de la feuille 1 du classeur baseboulot.xls. D'où le point.
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

33

itreal, le 10 nov 2009 à 10:57:05

Il me met : "Erreur d'exécution '1004':Erreur définie par l'application ou par l'objet"
Et quand je clic sur de Débogage il me souligne en jaune la ligne :
"Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, 1)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A" & numligne)"

Merci aussi pour ton aide pou pouille, je ne t'avais pas dit merci hier lors de ton premier message.

Répondre à itreal

35

pijaku, le 10 nov 2009 à 11:36:52

Hou pinaize!!! Dur dur de trouver cette erreur... En gras ci dessous...

Ça ne marche pas, j'ai mis comme ça :
"Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot3.xls"
Dim numligne As Integer
With Workbooks("baseboulot.xls").Sheets("Feuil1")
numlign = .Range("A65536").End(xlUp).Offset(1, 0).Row
End With
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, 1)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 2), Cells(derlig, 2)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("B" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 4), Cells(derlig, 4)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("C" & numligne)"


pou pouille, merci de te joindre à nous. Pour répondre à ton interrogation, l'ouverture d'un classeur le rends de suite activé. En fait, classeur actif = dernier classeur ouvert. Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

36

itreal, le 10 nov 2009 à 11:43:45

Donc alors c'est parce que j'ai mal copié ce que tu m'as dit d'ajouter tout à l'heure ?

Répondre à itreal

37

pou pouille, le 10 nov 2009 à 11:46:16

L'erreur semble venir du E qui manque ici

numlign = .Range("A65536").End(xlUp).Offset(1, 0).Row

numligne = .Range("A65536").End(xlUp).Offset(1, 0).Row la théorie et la pratique c'est la même chose...enfin en théorie

Répondre à pou pouille

34

pou pouille, le 10 nov 2009 à 11:04:44

Méacoulpa, j'avais pas bien fait attention. la théorie et la pratique c'est la même chose...enfin en thé­orie

Répondre à pou pouille

31

pou pouille, le 10 nov 2009 à 10:45:07

Je viens de lire qu'il fallait d'abord activer la feuille, avant la fonction(je suis pas sure de ca) la théorie et la pratique c'est la même chose...enfin en thé­orie

Répondre à pou pouille

38

itreal, le 10 nov 2009 à 11:54:07

Ça marche, incroyable !!! MERCI

Je peux abuser par rapport au tri ?
Si tu as encore un peu de temps bien sur.

Répondre à itreal

39

pou pouille, le 10 nov 2009 à 11:58:14

Lors d'un enregistrement macro voici le code qui est généré par excel :

    Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

je sais pas si tous les parametres sont utiles.
et surtour choisir la "sélection " la théorie et la pratique c'est la même chose...enfin en théorie

Répondre à pou pouille

40

itreal, le 10 nov 2009 à 12:09:27

AH purée non, j'ai une erreur.
J'ai ma cellule A1 qui normalement est l'entête de mon tableau qui vient d'être remplacée par une donnée.
1 Date d'enregist Date courrier
1 27/10/2009 13/10/2009
3 27/10/2009 13/10/2009
au lieu de
N° Date d'enregist Date courrier
1 27/10/2009 13/10/2009
3 27/10/2009 13/10/2009

Répondre à itreal

41

pou pouille, le 10 nov 2009 à 12:12:25

C'est normale puisque

selection
il selectionne tout le tableau ,
donc déja il faut que tu choisisse la plage de la séléction, ensuite tu décal tu remplace le A1 par A2 la théorie et la pratique c'est la même chose...enfin en thé­orie

Répondre à pou pouille

42

pijaku, le 10 nov 2009 à 12:14:15

Pour moi, le tri ne devrait pas se faire automatiquement à l'ouverture. C'est un choix que tu devrais laisser à l'utilisateur...
Mais effectivement, on peux faire une macro dans ce sens... Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ­ou est le problème? --

Répondre à pijaku

43

pijaku, le 10 nov 2009 à 12:51:32

Un exemple de ce qui peux être fait : ici Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ­ou est le problème? --

Répondre à pijaku

44

itreal, le 10 nov 2009 à 13:35:20

Excuse moi pijaku mais je comprends pas, pourquoi au début tout marchait bien et là le fait de choisir des colonnes à insérer fait tout merder ?
Mais surtout, je ne comprends pas où je dois faire ce changement dont tu me parles A1 en A2 ?

Private Sub Workbook_Open()
Dim derlig As Integer, dercol As Integer
ActiveSheet.Range("A2:AZ65536").ClearContents

Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot1.xls"
With Workbooks("baseboulot.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = NomFic
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks("baseboulot1.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, dercol)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0)

Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot2.xls"
With Workbooks("baseboulot.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = NomFic2
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks("baseboulot2.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, dercol)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0)

Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot3.xls"
Dim numligne As Integer
With Workbooks("baseboulot.xls").Sheets("Feuil1")
numligne = .Range("A65536").End(xlUp).Offset(1, 0).Row
End With
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, 1)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 2), Cells(derlig, 2)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("B" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 4), Cells(derlig, 4)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("C" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 7), Cells(derlig, 7)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("D" & numligne)

End Sub

Répondre à itreal

45

pijaku, le 10 nov 2009 à 14:37:31

C'est quoi ces nomfic, nomfic2 etc ... Tu devais les changer pour mettre les noms de tes fichiers......... Comme ceci :

Private Sub Workbook_Open()
Dim derlig As Integer, dercol As Integer
ActiveSheet.Range("A2:AZ65536").ClearContents

Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot1.xls"
With Workbooks("baseboulot.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = "baseboulot1.xls"
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks("baseboulot1.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, dercol)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0)

Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot2.xls"
With Workbooks("baseboulot.xls").Sheets("Feuil1")
.Range("A65536").End(xlUp).Offset(2, 0) = baseboulot2.xls"
.Range("A65536").End(xlUp).Font.Bold = True
.Range("A65536").End(xlUp).Font.ColorIndex = 3
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
dercol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
Workbooks("baseboulot2.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, dercol)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0)

Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot3.xls"
Dim numligne As Integer
With Workbooks("baseboulot.xls").Sheets("Feuil1")
numligne = .Range("A65536").End(xlUp).Offset(1, 0).Row
End With
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, 1)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("A" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 2), Cells(derlig, 2)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("B" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 4), Cells(derlig, 4)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("C" & numligne)
Workbooks("baseboulot3.xls").ActiveSheet.Range(Cells(2, 7), Cells(derlig, 7)).Copy Workbooks("baseboulot.xls").Sheets("Feuil1").Range("D" & numligne)

End Sub

Essaye déjà ça et reviens après Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

46

itreal, le 10 nov 2009 à 15:07:46

Ben non, je viens de faire ce que tu m'as dit et regarde ce que ça me fait :
1 Date d'enregist Date courrier

baseboulot1.xls
1 27/10/2009 13/10/2009
3 27/10/2009 13/10/2009
5 27/10/2009 13/10/2009
6 27/10/2009 13/10/2009
7 29/10/2009 13/10/2009
9 30/10/2009 13/10/2009
12 30/10/2009 13/10/2009
13 31/10/2009 13/10/2009
15 31/10/2009 13/10/2009

baseboulot2.xls
2 19/10/2009 15/10/2009
4 17/10/2009 15/10/2009
5 19/10/2009 15/10/2009

Répondre à itreal

47

pijaku, le 10 nov 2009 à 15:14:59

Ben c'est bien non? Que faut-il de plus? Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ­ou est le problème? --

Répondre à pijaku

48

itreal, le 10 nov 2009 à 15:34:15

Ben sur ce que je t'ai envoyé on se rend pas compte mais ca me mets dans le tableau "baseboulot1" "baseboulot2".

Mais c'est bon, j'ai remis Nomfic et ça remarche et j'ai même trouver la solution au problème de la cellule A1 qui se prenait un chiffre au lieu de mon entête de colonne.
J'ai inversé les deux dernières lignes et ça à l'air de marché :

avant:
Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot3.xls"
Dim numligne As Integer
With Workbooks("baseboulot.xls").Sheets("Feuil1")

après:
Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\essai\baseboulot3.xls"
With Workbooks("baseboulot.xls").Sheets("Feuil1")
Dim numligne As Integer

Tu penses que c'était bien ça ?

Répondre à itreal
Collection CommentÇaMarche.net