Leger probleme sur Macro

Bonjour le forum

J'ai cette macro

Sub import()
'
MsgBox "Le Fichier va être mis a jour", vbOKOnly + vbInformation, "PATIENTER"
    ChDir "S:\Sauvegarde Fichier Excel\fichier QVT\ok" 'choix dossier
    Workbooks.Open Filename:="S:\Sauvegarde Fichier Excel\fichier QVT\ok\Suivi des Situations 92.xlsm" ' OUVRIR LE FICHIER
    Sheets("Synthese").Select 'SELECTION DE LA FEUILLE
Worksheets("Synthese").Range(Cells(2, 46), Cells(Worksheets("Synthese").Range("AT" & Rows.Count).End(xlUp).Row, 1)).Select 'SELECTIONNER DE LA LIGNE 2 A LA COLONNE 46
    Selection.Copy 'COPIER
    Windows("base.xlsm").Activate
        ActiveSheet.Cells(Rows.Count, "A").End(xlUp)(2).Select 'COLLER A LA 1ER LIGNE VIDE
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("Suivi des Situations 92.xlsm").Activate 'FERMER LE FICHIER OUVERT
   Application.DisplayAlerts = False
    ActiveWorkbook.Close
End Sub

qui recupere les données d'un autre classeur et les importes dans mon classeur .

mais le probleme est que cela me recupere AUSSI la 1er ligne de l'autre classeur (ce que je ne souhaite pas ) et je ne vois pas mon erreur

Merci de votre aide.

Bonjour,

Si j'ai bien compris , la plage à copier serait A2:ATx ; x étant la dernière ligne "occupée" de la colonne AT.

Une instruction plus simple:

With Worksheets("Synthese")
.Range("A2:AT" & .Range("AT" & Rows.Count).End(xlUp).Row).Select
End With

Pour éviter de "jongler" avec les Windows("xxxxx.xlsm").Activate Il est préférable de déclarer des variables pour identifier les Classeurs et la feuille souhaitée:

Dim WB1 As Workbook, WB2 As Workbook, WS1 As Worksheet, WS2 As Worksheet

Set WB1 = ActiveWorkbook 'Classeur cible
Set WS1 = ActiveSheet

Set WB2 = Workbooks.Open Filename:="S:\Sauvegarde Fichier Excel\fichier QVT\ok\Suivi des Situations 92.xlsm"
Set WS2 = WB2.Worksheets("Synthese")

WS2.Range("A2:AT" & WS2.Range("AT" & Rows.Count).End(xlUp).Row).Copy
WS1.Cells(Rows.Count, "A").End(xlUp)(2).Select 'COLLER A LA 1ER LIGNE VIDE
......

A+

Bonjour AlgoPlus

Déjà Merci

mais cela ne fonctionne pas la premier ligne du classeur 2 est quand même récupérer et coller dans le Classeur 1.

Pour éviter de "jongler" avec les Windows("xxxxx.xlsm").Activate Il est préférable de déclarer des variables pour identifier les Classeurs et la feuille souhaitée:

Dim WB1 As Workbook, WB2 As Workbook, WS1 As Worksheet, WS2 As Worksheet

Set WB1 = ActiveWorkbook 'Classeur cible
Set WS1 = ActiveSheet

Set WB2 = Workbooks.Open Filename:="S:\Sauvegarde Fichier Excel\fichier QVT\ok\Suivi des Situations 92.xlsm"
Set WS2 = WB2.Worksheets("Synthese")

WS2.Range("A2:AT" & WS2.Range("AT" & Rows.Count).End(xlUp).Row).Copy
WS1.Cells(Rows.Count, "A").End(xlUp)(2).Select 'COLLER A LA 1ER LIGNE VIDE
......

A+

concernant ce point j'y avais penser mais compte tenu du fait que je dois recuperer les donnés dans 12 classeurs c'est un peu plus compliquer.

Slt,

essaie comme ca

Sub import()
'
MsgBox "Le Fichier va être mis a jour", vbOKOnly + vbInformation, "PATIENTER"
    ChDir "S:\Sauvegarde Fichier Excel\fichier QVT\ok" 'choix dossier
    Workbooks.Open Filename:="S:\Sauvegarde Fichier Excel\fichier QVT\ok\Suivi des Situations 92.xlsm" ' OUVRIR LE FICHIER
    Sheets("Synthese").Select 'SELECTION DE LA FEUILLE

    With Worksheets("Synthese")
       lrow = .Cells(Rows.Count, 1).End(xlUp).Row
       .Range("A2:AT" & lrow).Select .Select 'SELECTIONNER DE LA LIGNE 2 A LA COLONNE 46
    End With

    Selection.Copy 'COPIER
    Windows("base.xlsm").Activate
    ActiveSheet.Cells(Rows.Count, "A").End(xlUp)(2).Select 'COLLER A LA 1ER LIGNE VIDE
    ActiveSheet.Paste
    Application.DisplayAlerts = False
    ActiveWorkbook.Close
End Sub

Bonjour à tous,

ah oui! Un défaut de rattachement à une feuille (Rows.count).

La ligne à modifier:

WS2.Range("A2:AT" & WS2.Range("AT" & WS2.Rows.Count).End(xlUp).Row).Copy

...mais compte tenu du fait que je dois recuperer les donnés dans 12 classeurs c'est un peu plus compliquer.

Justement !, l'utilisation de variables permet de boucler sur tous les classeurs à traiter sans avoir besoin de saisir leur nom à l'ouverture et à la fermeture.

A+

Heu... finalement non; ma correction est absurde.

Est ce qu'il n'y aurait pas qu'une donnée en AT1 dans cette colonne AT ?

slt,

chane le End(xlUp) en End(xlDown)

Bonjour

Merci a tout les deux problème régler.

Rechercher des sujets similaires à "leger probleme macro"