Macro VBA pour exporter des lignes dans un autre fichier [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
mercredi 21 janvier 2015
Statut
Membre
Dernière intervention
23 janvier 2015
-
Messages postés
9755
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
-
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

6 réponses

Messages postés
9755
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
1 078
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 !

Messages postés
5
Date d'inscription
mercredi 21 janvier 2015
Statut
Membre
Dernière intervention
23 janvier 2015

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.
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 497 >
Messages postés
5
Date d'inscription
mercredi 21 janvier 2015
Statut
Membre
Dernière intervention
23 janvier 2015

Messages postés
9755
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
1 078
Bonjour,
J'espère que la proposition de pijaku (salutations) vous permette de résoudre le problème !
Au cas où vous revenez.

Messages postés
5
Date d'inscription
mercredi 21 janvier 2015
Statut
Membre
Dernière intervention
23 janvier 2015

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
Messages postés
9755
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
1 078
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

Messages postés
9755
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
1 078
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


Messages postés
5
Date d'inscription
mercredi 21 janvier 2015
Statut
Membre
Dernière intervention
23 janvier 2015

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.
Messages postés
5
Date d'inscription
mercredi 21 janvier 2015
Statut
Membre
Dernière intervention
23 janvier 2015

Je viens de tester ton Macro, il fonctionne très bien! Milles merci Le Pingou!
Messages postés
9755
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
1 078
Bonjour,
Merci, content pour vous.