Importer les lignes d'un autre classeur

Résolu/Fermé
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 - 19 févr. 2009 à 22:17
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 - 22 févr. 2009 à 21:06
Bonsoir tout le monde,

J'ai cherché sur le site car j'avais trouvé un poste avec une VBA qui m'allait au poil, mais je ne remet pas la main dessus, donc je vous demande un chti coup de main.

Sur excel 2003

J'ai un classeur qui s'appelle envoi avec la feuil1 dans laquelle je veux importer les lignes d'un autre classeur, après celles qui sont déjà présentes sur cette feuille, donc il faut que je détecte quelle est la première ligne videpour y coller mon import.


Mon autre classeur est ouvert, et n'est pas enregistré sur mon disque, je le reçoit par mail, je l'ouvre, je voudrait en extraire les lignes de la 3ème à la 30ème

Et inserrer avant celle-ci la date .

J'espère être clair

Merci à tout ceux qui pourront me faire avancer

Bonne sirée

15 réponses

Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
21 févr. 2009 à 23:48
Bonjour triwix,
Supposition : toutes les lignes de la feuille 1 (Feuil1) du classeur source en 1 bloc, sauf la 1 :ligne de Sur la feuille 1 du classeur cible à la suite des existantes.
La macro se charge des noms des classeurs.
Vous copier et coller ce code dans un module de votre classeur cible.
Sub Importer_ligne()
' macro enregistrée le 21 février 2009 par Jean-Pierre Purro
Dim objcible As Workbook, objsource As Workbook
Dim delig, prligvi
Set objcible = ActiveWorkbook
' position de la première ligne vide
prligvi = Cells(2000, 1).End(xlUp).Row + 1
Set objsource = Workbooks.Open(Application.GetOpenFilename)
' supposition, ligne 1et 2 avec titre non copier le reste en un bloc
' position de la dernière ligne de wo source : sur la colonne A
Sheets("Feuil1").Select
delig = Cells(2000, 1).End(xlUp).Row
Range("3:" & delig).Copy Destination:=objcible.Sheets("Feuil1").Range("A" & prligvi)
objcible.Activate
Sheets("Feuil1").Select
Range("A1").Select
MsgBox ("les " & delig & " lignes de données sont importées.")
End Sub
1
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
22 févr. 2009 à 15:06
Bonjour triwix,
Avant de continuer, essayez cette version : https://www.cjoint.com/?cypffyC86W
Vous aviez parlé de ligne vide ... quant n'est-il ?
1
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
20 févr. 2009 à 16:42
Bonjour,
Juste au passage, il est plus simple de réaliser un copier / coller.
0
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 21
21 févr. 2009 à 18:47
Oui je suis ok avec toi, c'est ce que je fait pour l'instant.

Mais je demande ça en vue de le faire plusieurs fois par jour
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
21 févr. 2009 à 22:44
Bonjour,
Pouvez-vous préciser,
si la première ligne du classeur source a des titres, si oui faut-il l'importer ?
Est-ce que les lignes sont importer en bloc ?
Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 21
21 févr. 2009 à 23:35
Bien le bonsoir,


Donc oui il y a des titres de colonne sur les 2 premières lignes à ne pas importer.

Et en général environ 10 à 20 ligne c'est pour ça que je sélectionnerais de la ligne 3 à la 30 à importer comme ça j'ai tout ce qu'il faut.

Les importations doivent se coller à la suite les unes des autres avec une ligne de séparation et éventuellement la date d'import

Pour ton autre question je ne m'en souviens pas et je ne sais pas ce que j'ai bricolé je ne peux plus lire ton message

Peux tu me dire si on peux masquer les message car là je ne vois pas

Bonne nuit
0
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 21
21 févr. 2009 à 23:38
C'est bon c'est revenu.

Donc oui on peut importer les 27 ligne en blocs je pense que ce serait moins gourmand en ressources que de chercher une à une les lignes non vides pour les importer.

Peut-être que je me trompe.

Bonne soirée à tous
0
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 21
22 févr. 2009 à 00:06
RE, le pingou, merci de ta réponse rapide, mais je ne peux pas la lire je ne sais pas ce qui bug si c'est chez moi ou sur le site....

On verra demain, bonne nuit
0
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 21
22 févr. 2009 à 13:55
Salut, ca fonctionne très bien, j'ai mis

prligvi = Cells(2000, 1).End(xlUp).Row + 3 pour intercaler les importations de 2 lignes.

Seul truc on me demande d'ouvrir le dossier :

Set objsource = Workbooks.Open(Application.GetOpenFilename)

alors qu'il est ouvert, mais pas enregistré sur mon disque, donc je doit l'enregistrer, puis la macro me demande de le réouvrir.

j'essaie de modifier cette phrase pour que l'application reconnaisse mon fichier transactions.xls qui est déjà ouvert en lecture seule, mais en vain, t'as un tuyau s'il te plait?

Bon dimanche
0
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 21
22 févr. 2009 à 16:30
Rebonjour Le Pingou,

Impeccable, la macro ramenée à mon cas donne ça:

Sub Import_ligne()
' macro enregistrée le 21 février 2009 par Jean-Pierre Purro
Dim objcible As Workbook, objsource As Workbook
Dim importdulea As String
Dim delig, prligvi
Set objcible = ActiveWorkbook
' position de la première ligne vide
prligvi = Cells(2000, 1).End(xlUp).Row + 3
Set objsource = Workbooks.Open(Application.GetOpenFilename)
' supposition, ligne 1et 2 avec titre non copier, le reste en un bloc
' position de la dernière ligne de wosource : sur la colonne A
' Importation du "Classeur1.xls" le 15 décembre 2008 à 15:52
importdulea = "Importation du classeur [" & objsource.Name & "] le " & Format(Date, "dd mmmm yyyy") & " à " & Time
Sheets("transactions").Select
delig = Cells(2000, 1).End(xlUp).Row
objcible.Sheets("Feuil1").Range("A" & prligvi) = importdulea
With Cells(prligvi, 1).Font
.Color = -16776961
.TintAndShade = 0
End With
Range("3:" & delig).Copy Destination:=objcible.Sheets("Feuil1").Range("A" & prligvi + 1)
objsource.Close SaveChanges:=False
objcible.Activate
Sheets("Feuil1").Select
Range("A1").Select
MsgBox ("les " & delig & " lignes de données sont importées.")
End Sub


Juste un soucis avec .TintAndShade = 0 qui bogg une fois oter ça roule

J'ai insèré des lignes vides entre les importation c'est OK

Tu m'ote une grosse épine du pied, et je te remercie du temps que tu m'a consacré.

La seule dernière question avant que ma requète soit résolue totalement est Comment modifier:

Set objsource = Workbooks.Open(Application.GetOpenFilename)

De façon à ce que mon fichier qui s'appelle transactions et qui est ouvert soit pris en compte comme source.

Car dans le cas présente je dois l'enregister pour indiquer son chemin à la macro.

Je ne sais pas si je me fais bien comprendre.

encore merci

@+
0
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 21
22 févr. 2009 à 16:58
Ah je mes suis réjoui trop tard car il faut que je copie que jusqu'à la colonne AF et non la ligne complette.

Je regarde comment matérialiser ça dans la macro
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
22 févr. 2009 à 17:42
Bonjour triwix,
Concernant le classeur source :
1.-Votre classeur est sur un répertoire du PC (depuis le mail il est simple de le glisser sur le bureau)
2.- Si vous ne voulez pas la glisser sur votre bureau mais simplement l’ouvrir, il faut modifier la variable [objsource] en As String et ensuite lui attribuer le nom de votre classeur car l’application doit avoir le nom exact.
Concernant .TintAndShade = 0 , il n’est pas reconnu par la version 2003, vous le supprimer, c’est un oubli de ma part.
0
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 21
22 févr. 2009 à 18:02
Pas de soucis pour l'oubli j'avais oté la ligne rebelle.

Comment dois inscrir le chemin de l'objet source qui est ouvert, car je met ça mais le déboggeur me dit que je n'ai pas d'objet:
Sub Import_ligne()
' macro enregistrée le 21 février 2009 par Jean-Pierre Purro
Dim objcible As Workbook, objsource As String
Dim importdulea As String
Dim delig, prligvi
Set objcible = ActiveWorkbook
' position de la première ligne vide
prligvi = Cells(2000, 1).End(xlUp).Row + 3
Set objsource = "transactions.xls"
' supposition, ligne 1et 2 avec titre non copier, le reste en un bloc
' position de la dernière ligne de wosource : sur la colonne A
' Importation du "Classeur1.xls" le 15 décembre 2008 à 15:52
importdulea = "Importation du classeur [" & objsource.Name & "] le " & Format(Date, "dd mmmm yyyy") & " à " & Time
Sheets("transactions").Select
delig = Cells(2000, 1).End(xlUp).Row
objcible.Sheets("Feuil1").Range("A" & prligvi) = importdulea
With Cells(prligvi, 1).Font
.Color = -16776961
End With
Range("3:" & delig).Copy Destination:=objcible.Sheets("Feuil1").Range("A" & prligvi + 2)
objsource.Close SaveChanges:=False
objcible.Activate
Sheets("Feuil1").Select
Range("A1").Select
MsgBox ("les " & delig & " lignes de données sont importées.")
End Sub



Il faut le temps que ça rentre désolé pour les questions qui sont certainement élèmentaires

0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
22 févr. 2009 à 18:14
Bonjour triwix,
Je vais vous réaliser la modification.
Quelle est le nom exact de votre classeur source (attention majuscule/minuscule)
Merci.
0
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 21
22 févr. 2009 à 18:21
c'est sympa.

Nom: transactions ouvert en lecture seule si ça a une importance, fichier .xls
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
22 févr. 2009 à 18:54
Bonjour triwix,
J'espère que se sera bon !
Sub Importer_ligne_wbopen()
' macro enregistrée le 21 février 2009 par Jean-Pierre Purro
Dim objcible As Workbook, objsource As Workbook
Dim importdulea As String
Dim delig, prligvi
Set objcible = ActiveWorkbook
' position de la première ligne vide
prligvi = Cells(2000, 1).End(xlUp).Row + 1
Set objsource = Workbooks("transactions.xls")
objsource.Activate
' supposition, ligne 1et 2 avec titre non copier, le reste en un bloc
' position de la dernière ligne de wosource : sur la colonne A
' Importation du "Classeur1.xls" le 15 décembre 2008 à 15:52
importdulea = "Importation du classeur [" & objsource.Name & "] le " & Format(Date, "dd mmmm yyyy") & " à " & Time
Sheets("Feuil1").Select
delig = Cells(2000, 1).End(xlUp).Row
objcible.Sheets("Feuil1").Range("A" & prligvi) = importdulea
With objcible.Sheets("Feuil1").Cells(prligvi, 1).Font
        .Color = -16776961
    End With
Range("A3:AF" & delig).Copy Destination:=objcible.Sheets("Feuil1").Range("A" & prligvi + 1)
objcible.Activate
Sheets("Feuil1").Select
Range("A1").Select
MsgBox ("les " & delig & " lignes de données sont importées.")
End Sub

0
triwix Messages postés 296 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 4 février 2011 21
22 févr. 2009 à 19:22
Là je dit champion du monde!!! bravo

Voici la définitive:

Sub Importer_ligne_wbopen()
' macro enregistrée le 21 février 2009 par Jean-Pierre Purro
Dim objcible As Workbook, objsource As Workbook
Dim importdulea As String
Dim delig, prligvi
Set objcible = ActiveWorkbook
' position de la première ligne vide
prligvi = Cells(2000, 1).End(xlUp).Row + 3
Set objsource = Workbooks("transactions.xls")
objsource.Activate
' supposition, ligne 1et 2 avec titre non copier, le reste en un bloc
' position de la dernière ligne de wosource : sur la colonne A
' Importation du "Classeur1.xls" le 15 décembre 2008 à 15:52
importdulea = "Importation du classeur [" & objsource.Name & "] le " & Format(Date, "dd mmmm yyyy") & " à " & Time
Sheets("transactions").Select
delig = Cells(2000, 1).End(xlUp).Row
objcible.Sheets("Feuil1").Range("A" & prligvi) = importdulea
With objcible.Sheets("Feuil1").Cells(prligvi, 1).Font
.Color = -16776961
End With
Range("A3:AF" & delig).Copy Destination:=objcible.Sheets("Feuil1").Range("A" & prligvi + 2)
objcible.Activate
Sheets("Feuil1").Select
Range("A1").Select
MsgBox ("les " & delig & " lignes de données sont importées.")
End Sub


Encore merci, affaire réglée

bonne soirée
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
22 févr. 2009 à 21:06
Merci triwix, de rien.
0