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 SubEn 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...
@+
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 SubEt 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 SubEt 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 SubBonjour Keira, Jean-Eric
J'ai effectivement été trop rapide hier
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