Copier Coller avec n° de ligne variable

Bonjour à tous,

Je me suis tout récemment mis à la VBA dans le cadre d'un projet perso, et avec succès. L'idée était d'ouvrir un classeur Excel pour copier coller certaines cellules ou plage de cellule d'un ficher classeur à l'autre, avec l'un des noms de classeur qui change.

Aujourd'hui pour continuer je bloque légèrement.

Je souhaite pouvoir ouvrir un fichier (dont le nom changera à chaque fois), puis de copier certaines cellules ou plages de cellules définies (toujours les mêmes) vers le classeur (en pièce jointe).

Là ou je bloque c'est dans la définition de la ligne de destination.

Je souhaite que mon code recherche la ligne à partir de laquelle copier les données, et définir cette ligne comme variable.

Par exemple :

Aller cherche la ligne 43 -> définir la ligne 43 comme variable

Coller une cellule en K43 puis une autre en K44, et ce jusque K45

Répéter l'opération pour toutes les colonnes dans les sous catégories ne sont pas remplies.

Rebelotte à partir de la ligne 84

Puis ligne 125

Etc..

A tout hasard, ce tableau est mis sous cette forme afin d'en extraire de Tableaux Croisé Dynamiques

Merci de votre aide !

PS,

Voici le code de mon premier fichier (avec l'aide d'un certain moteur de recherche!)

Dim a As Variant, Nom2 As String

Nom = ActiveWorkbook.Name

ChDrive "C:" ' Choix du lecteur

ChDir "C:\" 'Choix du répertoire

a = Application.GetOpenFilename("fichier excel (*.xlsxm, *.xlsm", _

, "Sélection de vos fichiers excel", , True)

Select Case TypeName(a)

Case Is = "Boolean"

Exit Sub

Case Else

For b = LBound(a) To UBound(a)

Workbooks.Open a(b)

Next

End Select

Nom2 = ActiveWorkbook.Name

'Import Feuille Frigo Zone 1

'Buv Ext

Windows(Nom2).Activate

Sheets("Onglet1").Select

Range("F7:F8").Select

Selection.Copy

Windows("Préparation").Activate

Sheets("Onglet 3").Select

Range("B16:B17").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False


Bonsoir Jay_Stu, bonsoir le forum,

J'avoue ne pas avoir bien saisi les adresses des cellules source et celles des cellules destination... Je te propose le code ci-dessous à adapter :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Object 'déclare la variable OD (Onglet Destination)
Dim BO As FileDialog 'déclare la variable BO (Boîte Ouvrir)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Object 'déclare la variable OS (Onglet Source)
Dim LI As Long 'déclare la variable LI (Ligne)

Set CD = ThisWorkbook 'définit la classeur destination CD
Set OD = CD.Sheets("Onglet 3") 'définit l'onglet destination OD
Set BO = Application.FileDialog(msoFileDialogOpen) 'définit la boîte de dialogue BO
With BO 'prend en compte la boîte de dialogue BO
    If .Show = -1 Then 'condition si le bouton "Ouvrir" est appuyé avec un fichier sélectionné
        Workbooks.Open (.SelectedItems(1)) 'ouvre le fichier sélectionné
        Set CS = ActiveWorkbook 'définit le classeur source CS
    Else 'sinon (si le bouton "Annuler" est appuyé)
        MsgBox "Aucun fichier n'a été sélectionné !" 'message
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
End With 'fin de la prise en compte de la boîte de dialogue BO
Set BO = Nothing 'vide de la mémoire l'objet BO
Set OS = CS.Sheets("Onglet 1") 'définit l'onglet source OS
LI = OD.Cells(Application.Rows.Count, 10).End(xlUp).Row 'définit la dernière ligne éditée LI de la colonne 10 (=J) de l'onglet OD
If LI < 43 Then 'condition : si LI est inférieure à 43
    LI = 43 'LI devient la ligne 43
Else 'sinon
    LI = (LI \ 42) * 42 + 43 'LI est définie comme la première ligne d'un bloc de 42 lignes, après la ligne 43
End If 'fin de la condition

'ici tes copier/coller (je n'ai pas bien compris entre le code et le fichier exemple)
OS.Range(Ta_plage).Copy
OD.Cells(LI, 10).PasteSpecial (xlPasteValues) 'colle dans la colonne 10 (=J) à partir de la ligne LI
End Sub

Bonjour ThauTheme,

Désolé pour le délai de réponse.

Effectivement, mes explications sont confuses, pas facile !

Néanmoins tu as bien répond à ma question, j'ai repris une partie de ton code et l'ai adapté à mon besoin... et puis Miracle (ou pas), ca marche !

Tu m'as enlevé une épine du pied !

Pour infor voici le code utilisé :

' on repère le numéro de la dernière ligne non vide'

LI = 1

Do Until IsEmpty(OD.Cells(LI, 29))

LI = LI + 1

Loop

Merci de l'aide !

Bonsoir Jay_stu, bonsoir le forum,

Pourquoi une boucle alors que :

LI = OD.Cells(Application.Rows.Count, 29).End(xlUp).Row

fait tout aussi bien l'affaire ?...

Bonjour,

Désolé pour, e retour tardif, un stagiaire au boulot m'a aidé à finir le mordeau de code restant !

Tout marche à merveille maintenant !

Merci encore de ton aide, et joyeuses fêtes !

Rechercher des sujets similaires à "copier coller ligne variable"