Macro VBA pour exporter des lignes dans un autre fichier

Résolu/Fermé
neurosis12 Messages postés 5 Date d'inscription mercredi 21 janvier 2015 Statut Membre Dernière intervention 23 janvier 2015 - Modifié par neurosis12 le 21/01/2015 à 21:43
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 - 23 janv. 2015 à 20:14
Bonjour,

Je dois réaliser un macro Excel (2002) qui permettra de copier des lignes de plusieurs fichiers sources (dans l'exemple fichier 1 et 2) vers un fichier cible (fichier3). Ce macro s'exécute en pressant sur un bouton dans le fichier source.

Le code de ce macro est dans un fichier nommé fichier1.xls. Il exporte les données sélectionnées dans le premier Range vers le fichier3.xls. Ici le Range de B10:K500 a été mis arbitrairement (nous ne savons pas combien de lignes une personne écrira avant d'exporter).

Toutefois, cela ne fonctionne que lorsque le fichier cible est vide. S'il y a déjà des lignes dans le range cible cela me renvoie l'erreur suivante:

"Erreur d'execution 1004 - Cette opération requiert que les cellules fusionnées soient de taille identique."

De ce que je comprends, je crois que cela est dû au fait que le macro effacerait les données déjà présente (pour coller les nouvelles). Mon objectif serait donc de les mettre à la suite des données déjà présentes.

Voici un exemple d'utilisation:

- Le Fichier cible (fichier3.xls) est présentement vide

- J'écris 3 lignes dans le fichier1.xls et je les exporte en cliquant sur le bouton du macro

- Le Fichier cible (fichier3.xls) contient les 3 lignes exportées

- J'écris 5 lignes dans le fichier2.xls et je les exporte en cliquant sur le bouton du macro

- Le fichier cible contient maintenant 8 lignes (3 lignes du fichier1 + 5 lignes du fichier2)


Voici le code du macro:

Sub Exporter()
ActiveSheet.Shapes("Button 4").Select
Range("B10:K500").Select
Selection.Copy
Workbooks.Open Filename:= _
"C:\Users\neurosis12\fichier2.xls"
Sheets("Compilation").Select
Range("B10:K500").End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
A voir également:

6 réponses

Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
21 janv. 2015 à 22:12
Bonjour,
Il semble qu'il y a un problème : selon votre macro qui est dans le [fichier1.xls], les lignes copiées sont celles du fichier 1 qui sont exporter/copier dans le fichier 2 .... Pas de trace du fichier 3...
C'est différent de vos explications !

0
neurosis12 Messages postés 5 Date d'inscription mercredi 21 janvier 2015 Statut Membre Dernière intervention 23 janvier 2015
Modifié par neurosis12 le 22/01/2015 à 00:06
Mes excuses, j'avais modifié a la main l'adresse pour ne pas révéler des informations sur un disque dur ne m'appartenant pas (travail) et au départ je n'avais prévu que 2 fichiers dans mon exemple.

Pour être plus clair, le fichier 1 et 2 c'est le même fichier mais à deux emplacements différents. Ces fichiers ont un bouton exporter et celui-ci copie colle les 500 lignes (non vide) - donc admettons qu'il a écrit 5 lignes elles sont copier collées dans le "fichier3" qui est en quelque sorte le fichier cible de tout les fichier1 (il va probablement en avoir plus que deux, mais je ne crois pas que cela ne cause de problèmes).

Si aucune donnée n'est encore présente dans le fichier3 le macro fonctionne. Le problème survient lorsque j'ai déjà des données d'exportées. Puisque mon deuxième Range est "statique" je crois que le problème est là (il essaie de "collage spécial" par dessus des données non vide. Il faudrait en quelque sorte que je sois capable de savoir à quelle ligne (la première vide) je peux importer les données subséquentes.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752 > neurosis12 Messages postés 5 Date d'inscription mercredi 21 janvier 2015 Statut Membre Dernière intervention 23 janvier 2015
22 janv. 2015 à 10:14
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
22 janv. 2015 à 11:50
Bonjour,
J'espère que la proposition de pijaku (salutations) vous permette de résoudre le problème !
Au cas où vous revenez.

0
neurosis12 Messages postés 5 Date d'inscription mercredi 21 janvier 2015 Statut Membre Dernière intervention 23 janvier 2015
23 janv. 2015 à 15:21
Bonjour! Je suis allé voir le lien que pijaku m'a recommandé. Je crois avoir trouvé ce qui me permettrait de faire fonctionner le macro mais je n'y arrive pas. Je ne suis pas très familier avec VBA, mais de ce que j'y comprend, l'idée serait la suivante:
- Pour savoir ou coller les données exportées, le macro indiquerait la feuille et la ligne ou commencer le collage spécial

L'erreur se trouve fort probablement dans ces lignes (selon le débogueur). De ce que j'ai pu comprendre, la variable derniereLigne ne prend pas la valeur assignée (la ligne suivant la dernière contenant du texte).


Dim derniereLigne As Range
derniereLigne = Range("B10").End(xlDown).Row + 1
derniereLigne.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


Mon intuition me dit que puisque le numéro de la ligne contenu dans ma variable derniereLigne pourrait être collé a l'emplacement en haut à gauche par exemple Range("B" & derniereLigne)

Voici la version complète :


Sub Exporter()
'
' Exporter Macro
' Macro enregistrée le 2015-01-12 par marl03
'
'
ActiveSheet.Shapes("Button 4").Select
Range("B10:K500").Select
Selection.Copy
Workbooks.Open Filename:= _
"C:\Users\neurosis12\fichier3.xls"
Sheets("Compilation").Select
Dim derniereLigne As Range
derniereLigne = Range("B10").End(xlDown).Row + 1
derniereLigne.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
23 janv. 2015 à 15:40
Bonjour,
Merci, je vous ferai une proposition en fin de journée.
Patience.
Note : vous avez ceci au début
Range("B10:K500").Select

Est-ce bien correct ou il s'agit des lignes à copier dès la 10 jusqu'à la dernière ligne qui peut être 25
soit :
Range("B10:K25").Select

Merci de votre réponse

0

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

Posez votre question
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
23 janv. 2015 à 16:50
Bonjour,
Essayer avec cette procédure (j'ai laissé les lignes non utilisées en commentaires (en vert):
Sub Exporter()
'
' Exporter Macro
' Macro enregistrée le 2015-01-12 par marl03
'
Dim derniereLigne As Integer, deliso As Integer
Dim shso As Object, shci As Object '
Set shso = ActiveSheet
With shso
'    ActiveSheet.Shapes("Button 4").Select ' instruction inutile ...!
' *** chercher numéro dernière ligne à copier
    deliso = .Cells(Rows.Count, 2).End(xlUp).Row
'    Range("B10:K500").Select
'    Selection.Copy
    Workbooks.Open Filename:="C:\Users\neurosis12\fichier3.xls"
    Set shci = Sheets("Compilation")
' *** position première ligne vide
    derniereLigne = shci.Cells(Rows.Count, 2).End(xlUp).Row + 1
'   derniereLigne.Select
' *** copier plage source vers cible
    .Range("B10:K" & deliso).Copy Destination:=shci.Range("B" & derniereLigne)
'    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'   :=False, Transpose:=False
'    ActiveWorkbook.Save 'fermeture et sauvegarde dans ligne suivante
    ActiveWorkbook.Close SaveChanges:=True
End With
Set shso = Nothing
Set shci = Nothing
End Sub


0
neurosis12 Messages postés 5 Date d'inscription mercredi 21 janvier 2015 Statut Membre Dernière intervention 23 janvier 2015
23 janv. 2015 à 17:50
Merci infiniment pour vos réponses! Je viens de sortir de réunion alors laissez moi un moment pour tester et vous donner une réponse claire.
0
neurosis12 Messages postés 5 Date d'inscription mercredi 21 janvier 2015 Statut Membre Dernière intervention 23 janvier 2015
23 janv. 2015 à 20:04
Je viens de tester ton Macro, il fonctionne très bien! Milles merci Le Pingou!
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
23 janv. 2015 à 20:14
Bonjour,
Merci, content pour vous.
0