Macro coller dernière ligne vide

Bonjour,

J'aurais besoin d'un coup de main : il faut que je copie plusieurs cases "éparpillé" dans un fichier A et les coller en ligne dans un fichier B. Jusque là je m'en sort à peu près, le problème est qu'il faut que je fasse ça une fois par jour sans effacer la ligne de la veille.

J'ai bien trouvé des posts qui expliquent comment coller à la dernière ligne libre mais sur un seul fichier. Je ne trouve pas de solution pour mon cas particulier.

Merci d'avance

Bonjour Lafouil, bonjour le forum,

Le code ci-dessous, à placer dans le fichier A et où tout reste à adapter à ton cas, devrait convenir :

Sub Macro1()
Dim A As Workbook
Dim OA As Worksheet
Dim B As Workbook
Dim OB As Worksheet
Dim PL As Range
Dim LI As Integer
Dim CEL As Range
Dim I As Byte

Set A = ThisWorkbook
Set OA = A.Sheets("Feuil1")
Set B = Workbooks("B.xlsx")
Set OB = B.Sheets("Feuil1")
Set PL = Application.Union(Range("A1"), Range("B4"), Range("C3"), Range("D1"))
LI = IIf(B.Range("A1").Value = "", 1, B.Cells(Application.Rows.Count, 1).End(xlUp).Rows + 1)
I = 1
For Each CEL In PL
   B.Cells(LI, I).Value = CEL.Value
   'ou CEL.Copy B.Cells(LI, I)
   I = I + 1
Next CEL
End Sub

Salut,

Merci pour cette réponse super rapide.

Quand tu me dis que ce code est à placer dans le fichier A, si je comprend bien ça veut dire que la macro doit être dans le fichier A???

Si c'est le cas ça n'ira pas car le fichier A est remplacé tous les jours par un autre fichier du même nom.

Est ce que ce même code je peux le mettre dans le fichier B à activer avec un bouton.

Merci

Bon je l'ai re-bidouillé pour pouvoir la mettre sur le fichier B comme ça

Sub Macro1()

Dim A As Workbook

Dim OA As Worksheet

Dim B As Workbook

Dim OB As Worksheet

Dim PL As Range

Dim LI As Integer

Dim CEL As Range

Dim I As Byte

Set A = Workbooks("1 - Copie.xls")

Set OA = A.Sheets("Feuil1")

Set B = Workbooks("Bilan.xlsm")

Set OB = B.Sheets("Bilan")

Set PL = Application.Union(Range("A2"), Range("N18"), Range("N43"), Range("N46"), Range("AJ25"), Range("AJ43"))

LI = IIf(B.Range("A1").Value = "", 1, B.Cells(Application.Rows.Count, 1).End(xlUp).Rows + 1)

I = 1

For Each CEL In PL

B.Cells(LI, I).Value = CEL.Value

'ou CEL.Copy B.Cells(LI, I)

I = I + 1

Next CEL

End Sub

Mais la ligne surligné à un "bug" : défaut : Erreur d'exécution '438':

Propriété ou méthode non gérée par cet objet

Est ce que ma bidouille est bonne et où est le problème avec cette ligne

Merci

Bonjour Lafouil, bonjour le forum,

Tu as très bien adapté le code ! C'est de ma faute il y a un S en trop à Rows :

LI = IIf(B.Range("A1").Value = "", 1, B.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1)

Merci je test tout de suite


Non toujours pas bon, même défaut et même ligne

Bonjour Lafouil, bonjour le forum,

L'inconvénient de travailler sans fichier c'est qu'on ne peut pas tester ou sinon il faut tout recréer et j'avoue que j'ai eu la flemme...

L'erreur vient du fait que l'on désigne le classeur B et non l'onglet du classeur OB... Là, ça va marcher avec :

LI = IIf(OB.Range("A1").Value = "", 1, OB.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1)

Ok je te remerci, je test si ça marche toujours pas je posterais les .xls


Bon même erreur mais sur la ligne B.Cells(LI, I).Value = CEL.Value

Voilà, je te remercie encore, prend ton temps y a rien qui urge

29base.xlsm (102.04 Ko)
29bilan.xlsm (16.97 Ko)

Bonjour Lafouil, bonjour le forum,

Arf ! Enfin une proposition décente. C'est plus facile quand on teste...

Sub Macro1()
Dim A As Workbook
Dim OA As Worksheet
Dim B As Workbook
Dim OB As Worksheet
Dim PL As Range
Dim LI As Integer
Dim CEL As Range
Dim I As Byte

Set A = Workbooks("Base.xlsm")
Set OA = A.Sheets("Feuil1")
Set B = Workbooks("Bilan.xlsm")
Set OB = B.Sheets("Bilan")
Set PL = Application.Union(OA.Range("A2"), OA.Range("N18"), OA.Range("N43"), OA.Range("N46"), OA.Range("AJ25"), OA.Range("AJ43"))

LI = IIf(OB.Range("A1").Value = "", 1, OB.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1)
I = 1
For Each CEL In PL
OB.Cells(LI, I).Value = CEL.Value
'ou CEL.Copy OB.Cells(LI, I)
I = I + 1
Next CEL
End Sub

Nickel

merci beaucoup, tu me sauves

Rechercher des sujets similaires à "macro coller derniere ligne vide"