Copier données dans une autre classeur, en fin de liste

Bonjour à tous !

Je dois réaliser une macro permettant de copier des données d'un classeur source vers un autre classeur cible.

Comme je suis une bille en VBA je sollicite le forum pour esperer trouver une solution

Les données à copier sont disséminer un peut partout dans le classeur source:

- Cellule P4 feuille "Synthèse"

- Cellule A1 et A2 feuille "Grille"

- Colonne B,D,E,F feuille "Grille"

Le gros soucis est qu'il peux y avoir des trous dans les colonnes et je ne veux pas copier ces trous. (Ex: L8,L9,L10;L12,L13,L14,L15,...)

De meme dans le fichier cible, il peux y avoir des ligne vides (Ex: L3, L6) ; et je voudrai copier les données tout en bas de la feuille.

Vous trouverez en PJ les deux classeurs. Dans le classeur cible, j'ai mis en orange le resultat attendu.

J'espere etre clair dans mes explications

A bientot

Théophile

7classeur-cible.xlsx (138.87 Ko)

bonjour Théophile,

Comme on dit :

C'est en forgeant qu'on devient forgeron

Pourquoi ne pas utiliser l'enregistreur de macro en réalisant les actions que tu souhaites développer en VBA et revenir vers nous avec un début de code ?

a très vite

Bonjour,

J'ai trouvé une solution alternative.

Sub Macro1()
'
' Macro1 Macro
'
' Touche de raccourci du clavier: Ctrl+a
'
    Workbooks.Open "C:\Users\carpentiert\Desktop\test2\Classeur cible.xlsm"
    For x = 1 To 33
        Rows("2:2").Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
    Next x
' copier coller observation
    Windows("Classeur source.xlsm").Activate
    Range("B4:B36").Select
    Selection.Copy
    Windows("Classeur cible.xlsm").Activate
    Range("C2").Select
    ActiveSheet.Paste

' copier coller amélioration
    Windows("Classeur source.xlsm").Activate
    Range("D4:D36").Select
    Selection.Copy
    Windows("Classeur cible.xlsm").Activate
    Range("L2").Select
    ActiveSheet.Paste

' copier coller echeance
    Windows("Classeur source.xlsm").Activate
    Range("F4:F36").Select
    Selection.Copy
    Windows("Classeur cible.xlsm").Activate
    Range("M2").Select
    ActiveSheet.Paste

' copier coller responsable
    Windows("Classeur source.xlsm").Activate
    Range("E4:E36").Select
    Selection.Copy
    Windows("Classeur cible.xlsm").Activate
    Range("N2").Select
    ActiveSheet.Paste

' Ajout ref audit + date
    Windows("Classeur cible.xlsm").Activate
    Range("A2").Select
    ActiveCell.FormulaR1C1 = _
        "=CONCAT('[Classeur source.xlsm]Grille'!R1C1:R1C6,"" - "",'[Classeur source.xlsm]Grille'!R2C1:R2C6)"
    Windows("Classeur cible.xlsm").Activate
    Range("B2").Select
    ActiveCell.Formula2R1C1 = "='[Classeur source.xlsm]Synthèse'!R4C16"

' Suppression liste données
    Windows("Classeur cible.xlsm").Activate
    Range("D2:K34,O2:P34").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
        :=xlBetween
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
'Ajout source + norme + chapitre + ecart + secteur + statut
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "Audit produit"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "IATF"
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "9.2.2.4 Audit produit"
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "point d'amélioration"
    Range("K2").Select
    ActiveCell.FormulaR1C1 = "Fonderie"
    Range("O2").Select
    ActiveCell.FormulaR1C1 = "A définir"

    Range("A2:B2").Select
    Selection.AutoFill Destination:=Range("A2:B34"), Type:=xlFillDefault
    Range("D2:K2").Select
    Selection.AutoFill Destination:=Range("D2:K34"), Type:=xlFillDefault
    Range("O2").Select
    Selection.AutoFill Destination:=Range("O2:O34"), Type:=xlFillDefault

' Supprimer ligne vide
    Windows("Classeur cible.xlsm").Activate
    Range("L2:L34").Select
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.EntireRow.Delete
    Cells.Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("A1").Select

End Sub

J'ai en effet utilisé l'enregistreur de macro.

Rechercher des sujets similaires à "copier donnees classeur fin liste"