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.

28vente-v1-2.xlsm (209.07 Ko)

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 .

Rechercher des sujets similaires à "importation donnees vba"