Importation de données VBA
Bonjour Bonjour
Voila je recherche à "importer" une plage de cellule d'un autre classeur vers un onglet.
Classeur original : vente v1.2.xlsm -> onglet: "Recap"
Classeur de destination: Gestion du stock v1.1.xlsm -> onglet:"Sortie"
Je suis passé par une fonction copy comme si je met cut cela plante.
Sub importation()
Workbooks("Vente v1.2.xlsm").Sheets("Recap").Range("a2:D" & Range("a" & Rows.Count).End(xlDown).Row).Copy
NbreLn = Workbooks("Vente v1.2.xlsm").Sheets("Recap").Range("a2:D" & Range("a" & Rows.Count).End(xlDown).Row).Rows.Count
Ln = Workbooks("Gestion du stock v1.1.xlsm").Sheets("sortie").Range("A" & Rows.Count).End(xlUp)(2).Row
Workbooks("Gestion du stock v1.1.xlsm").Sheets("sortie").Cells(Ln, "A").PasteSpecial xlPasteValues
Workbooks("Vente v1.2.xlsm").Sheets("Recap").Range("a2:D" & Range("a" & Rows.Count).End(xlDown).Row).ClearContents
End Sub
Mon problème est que si je procède à une nouvelle importation cela plante car la plage de cellule de destination n'est pas de la même taille.
Je n'ai rien rempli dans l'exemple car le nombre de ligne va obligatoirement varier.
Bonjour
Tu peux essayer avec une connexion ADODB classeur fermé
Option Explicit
'importer le contenu d'une feuille de calcul d'un classeur fermé
'(seules les données sont importées, pas les mises en forme)
Sub Importation()
Dim Fich$, Feuille$
Fich$ = ActiveWorkbook.Path & "\Vente v1.2.xlsm"
Feuille$ = "Recap"
ImportWithADO Fich, Feuille
End Sub
Public Sub ImportWithADO(NomFichier$, Feuille$)
Dim Cn As Object ' Objet pour la connexion
Dim Rst As Object ' Objet pour le recordset
Dim sSQL As String
' Créer une nouvelle connection
Set Cn = CreateObject("ADODB.connection")
' Définir les paramètres de connexion
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& NomFichier & ";Extended Properties=""Excel 12.0"""
.Open
End With
' La requête est basée sur le nom de la feuille.
' Ce nom doit se terminer par un $ et doit être entouré de crochets droits.
sSQL = "SELECT * FROM [" & Feuille & "$];"
'
' Créer un nouveau recordset
Set Rst = CreateObject("ADODB.Recordset")
'
' Ouvrir ce recordset avec les critères
' Paramètre 1 : adOpenForwardOnly = 0
' Paramètre 2 : adLockReadOnly = 1
' Paramètre 3 : adCmdText = 1
Rst.Open sSQL, Cn, 0, 1, 1
'
' Vérifie qu'on a bien reçu des données
If Not Rst.EOF Then
Sheets("Sortie").Range("A2").CopyFromRecordset Rst
Else
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If
'
' On nettoie pour finir
Rst.Close: Set Rst = Nothing
Cn.Close: Set Cn = Nothing
End Sub
Voir code modifié dans le fichier
A+
Bonsoir
(Chez moi il fait nuit et il est 18h... La Réunion)
Merci de ta réponse rapide Brunom45 ton code marche parfaitement sauf que cela copie les données sans les effacés et que si j'efface les données du fichier Vente v1.2 alors cela écrase mon stock.
Je voudrais copier les données de l'onglet Récap (Vente v1.2) pour alléger ce dernier et utiliser un classeur Gestion de stock pour gérer mon stock .