Excel - Copier des informations d'une feuille à l'autre

Bonjour,

Je suis un peu novice dans l'utilisation de VBA, je sais enregistrer des macros mais dans le cas présent je suis un peu bloquée.

Après plusieurs heures de recherche sur internet je ne suis pas arrivée à trouver la solution adéquate. J'ai essayé plusieurs combinaison trouvées sur le net qui n'ont rien donné.

Je vous joint un fichier test: Les informations seront rentrées journalièrement dans la feuille 'Production par jour' (Il y a une centaine de lignes de 'code' à rentrer mais afin d'éviter les erreur cela ce fera par lot de 20) et sera ensuite recopiée dans la feuille BDD globale à partir de la 1ere cellule vide en cliquant sur ajouter.

Mon problème est que je n'arrive pas a trouver comment copier les informations à partir de la 1ere cellule vide de la colonne A de la feuille BDD globale.

Sub Ajouter()
'
' Ajouter Macro
'

'
    Range("B5:E8").Select
    Selection.Copy
    Sheets("BDD globale").Select
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, transpose:=False
    Sheets("Production par jour").Select
    Range("D3").Select
    Application.CutCopyMode = False
End Sub

En vous remerciant par avance pour votre aide.

Bonjour Keira et

Il serait bien lorsque vous demandez de l'aide, que votre exemple corresponde à votre demande

Aucune feuille "BDD globale" alors que faire...

@+

Désolé, voici le bon fichier.

Merci

Re,

Voici le code

Sub Ajouter()
  Dim LoS As ListObject, LoD As ListObject
  Dim dLigS As Long, nLigD As Long
  Dim CelF As Range
  ' Définir le tableau structuré source
  Set LoS = ThisWorkbook.Sheets("Production par jour").ListObjects(1)
  ' Dernière ligne remplie de ce tableau
  dLigS = LoS.DataBodyRange.Find("*").Row - 1
  ' Définir le tableau structuré de destination
  Set LoD = ThisWorkbook.Sheets("BDD globale").ListObjects(1)
  ' Trouver la 1ère ligne vide de ce tableau
  Set CelF = LoD.ListColumns("DATE").Range.Find("")
  ' Si pa de cellule trouvée, on en ajoute une
  If CelF Is Nothing Or LoD.ListRows.Count = 0 Then
    LoD.ListRows.Add: nLigD = LoD.ListRows.Count
  Else
    ' Sinon on récupère son numéro
    nLigD = CelF.Row - LoD.HeaderRowRange.Row
  End If
  ' Copier les données sources
  LoS.DataBodyRange.Resize(dLigS).Copy
  ' Les coller dans celuio de destination
  LoD.DataBodyRange.Cells(nLigD, 1).PasteSpecial xlValues
  ' Petit message
  MsgBox "Les données ont été copiées", vbInformation, "C'EST FAIT..."
End Sub

Et le fichier

Edit : erreur de code rectifié

@+

Re,

Voici le code

Sub Ajouter()
  Dim LoS As ListObject, LoD As ListObject
  Dim dLigS As Long, nLigD As Long
  ' Définir le tableau structuré source
  Set LoS = ThisWorkbook.Sheets("Production par jour").ListObjects(1)
  ' Dernière ligne remplie de ce tableau
  dLigS = LoS.DataBodyRange.Find("*").Row - 1
  ' Définir le tableau structuré de destination
  Set LoD = ThisWorkbook.Sheets("BDD globale").ListObjects(1)
  ' 1ère ligne vide de ce talbeau
  nLigD = 1
  On Error Resume Next
  nLigD = LoD.DataBodyRange.Find("*").Row
  On Error GoTo 0
  ' Copier les données sources
  LoS.DataBodyRange.Resize(dLigS).Copy
  ' Les coller dans celuio de destination
  LoD.DataBodyRange.Cells(1, 1).PasteSpecial xlValues
  ' Ajouter une ligne vierge
  LoD.ListRows.Add AlwaysInsert:=True
  ' Petit message
  MsgBox "Les données ont été copiées", vbInformation, "C'EST FAIT..."
End Sub

Et le fichier

@+

Merci de votre réponse rapide.

Je viens de vérifier le fichier et je me rend compte que si je rentre de nouvelles données dans la feuille 'Production par jour', elles viennent écraser les informations déjà contenues dans le tableau de la feuille 'BDD globale' au lieu d’être recopiées à la suite. De plus il n'y a que les 4 premières lignes de la feuille 'Production par jour' qui sont recopiées, or le nombre de ligne devrait varier (macro permettant de copier jusqu'à la prochaine cellule vide). Désolé si je n’étais pas assez clair dans mon premier message.

Bonjour à toutes et tous,

Une autre proposition VBA.

Attention aux lignes vides dans les tableaux structurés.

Cdlt.

Public Sub AddDataInTable()
Dim lo As ListObject, lo2 As ListObject, r As Range
    Application.ScreenUpdating = False
    Set lo = Range("Production").ListObject
    If Not lo.DataBodyRange Is Nothing Then
        Set lo2 = Range("Archive").ListObject
        With lo2
            If .InsertRowRange Is Nothing Then
                Set r = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
            Else
                Set r = .InsertRowRange.Cells(1)
            End If
        End With
        lo.DataBodyRange.Copy
        r.PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        lo.DataBodyRange.Delete
    End If
End Sub

Bonjour Keira, Jean-Eric

J'ai effectivement été trop rapide hier je n'ai pas repris le bon code et pas testé

J'ai modifié mon post, mais Jean-Eric est passé par là

Bonjour BrunoM45, Jean-Eric,

Merci à vous deux. J'ai peaufiné mon fichier qui est maintenant prêt à être utilisé et j'ai trouvé une macro qui me permet d'enregistrer et de faire une sauvegarde du fichier à la fermeture (ci-joint).

J'aurai une une dernière petite question avant de clore le sujet.

Les feuilles BD produits et BDD gobale seront cachées. Cependant j'ai essayé de protéger la feuille production par jour tout en ne laissant actif que les cellules à remplir (colonne C,D,E à partir de la ligne 5) mais cela fait planter ma macro.

Pensez-vous que cela soit faisable?

Merci par avance

Bonjour,

Quelle procédure plante ?

Bon sinon, une feuille protégée avec un tableau structuré et l'insertion de lignes, ce n'est pas réellement compatible.

Précise bien ton process et ce que tu souhaites.

Cdlt.

Bonjour,

Quelle procédure plante ?

Bon sinon, une feuille protégée avec un tableau structuré et l'insertion de lignes, ce n'est pas réellement compatible.

Précise bien ton process et ce que tu souhaites.

Cdlt.

Bonjour,

Oui c'est plutôt l'insertion de ligne dans le tableau structuré qui ne fonctionne pas et les boutons non plus (feuille liste par jour).

J'aurai aimé protéger les deux feuilles pour réduire les risques d'erreur ou de mauvaise manip mais votre réponse répond à ma question.

Merci

Rechercher des sujets similaires à "copier informations feuille"