Copier les valeurs d'un tableau de longueur variable sans la mise en forme

Bonjour,

j'ai plusieurs petites questions pour un même projet.

Je dois copier les valeurs d'un tableau dans un autre classeur excel. Je pensais insérer un bouton "Mise à jour" avec une macro qui va ouvrir le fichier où se trouvent les valeurs à insérer, les sélectionner et les copier dans l'autre fichier excel. Jusque là ça va.

Voici mes problèmes qui sortent de mon champs de connaissance:

1- Mon tableau d'origine est de grandeur variable, quelqu'un va y insérer des lignes et je veux que ma macro aille chercher ses nouvelles lignes.

2- La fonction "Copier/Coller" en VBA copie aussi la mise en forme, mais je seulement la valeur.

3- Dans mon fichier avec la macro, je voudrais que le tableau s'adapte à la grandeur du tableau qui s'insére dans celui-ci pour que les valeurs ne soient pas copiés par-dessus les sections du tableau sous le tableau copié.

Merci de vos réponses et peut-être que ce que je veux accomplir se fait d'une façon plus simple que par macro, alors n'hésitez pas à me dire si vous voyez d'autres solutions.

Salut,

Ta demande est tout à fait réalisable.

Par contre, il serait préférable de joindre tes deux fichiers si tu veux obtenir des réponses.

A+

Bonjour, mes fichiers contiennent des informations confidentielles...

Avec l'information que j'ai mentionné, est-ce qu'il serait possible me lancer sur une piste avec un exemple de code que je pourrais appliquer à mon classeur?

Par exemple, existe-t-il une fonction qui colle des valeurs copiées sans leur mise en forme?

Salut,

je confirme qu'il sera difficile de t'aider sans fichier Excel. Mais bon à toi de voir.

Concernant ta question

L'exemple ci-dessous colle les valeurs des cellules A1 à A10 de l'onglet 1 vers l'onglet 2.

Sheets(1).Range("A1:A10").Copy
Sheets(2).Range("A1").PasteSpecial xlPasteValues

J'ai oublié, pout trouver la dernière ligne d'une colonne (ici la colonne A)

LastLine = ActiveSheet.Range("A1048576").End(xlUp).Row

D'accord, merci beaucoup pour ta réponse et merci aussi pour le code!

Pour ce qui est de mes autres points j'ai commencé à jouer avec l'idée de faire une boucle... reste à voir si je suis capable de faire quelque chose avec ça!

En attendant, si quelqu'un a des idées pour me partir, n'hésitez pas.

Edit:

Je viens de voir ton nouveau message, merci!

Jers19,

lorsque j'utilise la fonction PasteSpecial, j'obtiens un message d'erreur d'exécution '1004'.

Est-ce que j'ai fais un erreur?

Quand je fais un paste normal, j'obtiens la formule de la cellule qui est copié...

For I = 0 To N
    If Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm").Sheets("PAC").Cells(N, 1).Value <> "" Then

        Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm").Sheets("PAC").Cells(N, 1).Copy    'Copie la cellule de ligne "N"
        Workbooks("Tableau de bord Varennes_2018.xlsm").Activate                'Active la page du tableau de bord
        Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Range("B29").Select
        Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").PasteSpecial xlPasteValues

    Else

    End If

    N = N + 1

Next I

Alexandre,

For I = 0 To N

La variable N a t'elle été initialisée avant ?

De plus, tu boucles sur une variable I qui n'est appelée nulle part !!!

Ton code devrait ressemblé à quelque chose comme mais encore une fois, sans ton fichier excel, il te faudra adapter ce code.

LastLine = ActiveSheet.Range("A1048576").End(xlUp).Row
j=0
For i = 1 To LastLine 
    If Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes").Sheets("PAC").Cells(i, 1).Value <> "" Then
            Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes").Sheets("PAC").Cells(i, 1).Copy  
            Workbooks("Tableau de bord Varennes_2018").Sheets("Tableau de bord").Range("B29").Offset(j,0).PasteSpecial xlPasteValues
                j=j+1
        End If
Next i

Désolé je n'avais pas pensé à inclure tout le code.

Voici ce que je fais jusqu'à présent:

Private Sub MAJ_PAC_Click()

Dim I As Integer ' Compteur
Dim N As Integer ' Colonne no X

' Va chercher et ouvre le doc de PAC 2018
Workbooks.Open ("H:\DXA-DXB-SST\S-87 - Plan d'amélioration continue (PAC)\s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm")

N = 7

For I = 0 To N
    If Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm").Sheets("PAC").Cells(N, 1).Value <> "" Then

        Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm").Sheets("PAC").Cells(N, 1).Copy    'Copie la cellule de ligne "N"
        Workbooks("Tableau de bord Varennes_2018.xlsm").Activate                'Active la page du tableau de bord
        Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Range("B29").Select
        Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Range("B29").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    Else

    End If

    N = N + 1

Next I

Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm").Close

End Sub

Je sais qu'il peut y avoir des corrections, mais pour le moment je réussi à copier à une cellule et la copier.

Je pensais rajouté une condition pour que lorsqu'il y a déjà du texte sur le fichier où copier les valeurs, une ligne serais insérer.

Je crois être proche d'une solution qui fonctionne, mais j'ai un problème qui survient

Voici le code jusqu'à présent:

Private Sub MAJ_PAC_Click()

Dim I As Integer ' Compteur
Dim N As Integer ' Colonne où coller
Dim M As Integer ' Colonne où copier

' Va chercher et ouvre le doc de PAC 2018
Workbooks.Open ("H:\DXA-DXB-SST\S-87 - Plan d'amélioration continue (PAC)\s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm")

N = 7
M = 29

For I = 0 To N
    If Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm").Sheets("PAC").Cells(N, 1).Value <> "" Then

        Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm").Sheets("PAC").Cells(N, 1).Copy    'Copie la cellule de ligne "N"
        Workbooks("Tableau de bord Varennes_2018.xlsm").Activate                'Active la page du tableau de bord

        If Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Cells(M, 2).Value <> "" Then
            Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Cells(M, 2).Select
            Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Cells(M, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            M = M + 1
        Else
            Rows(M).Insert Shift:=xlUp
            'Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Cells(M, 2).Select
            Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Cells(M, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            M = M + 1
        End If

    Else

    End If

    N = N + 1

Next I

Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm").Close

End Sub

Le problème est semble survenir au niveau de cette partie du code:

        Else
            Rows(M).Insert Shift:=xlUp
            'Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Cells(M, 2).Select
            Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Cells(M, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            M = M + 1
        End If

Je résussi à insérer les lignes dans le fichier et à coller les valeurs désirés.

Cependant, des valeurs sont coller aussi dans chaque colonne de ligne rajouté :

capture

Si quelqu'un a un idée de comment arranger ça, n'hésitez pas.

Merci!

Alexandre

Voici ton code modifié.

Private Sub MAJ_PAC_Click()

Dim I As Integer ' Compteur
Dim N As Integer ' Colonne où coller
Dim M As Integer ' Colonne où copier

' Va chercher et ouvre le doc de PAC 2018
Workbooks.Open ("H:\DXA-DXB-SST\S-87 - Plan d'amélioration continue (PAC)\s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm")

N = 7
M = 29

For I = 1 To N+1
    If Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes").Sheets("PAC").Cells(N, 1).Value <> "" Then
        If Workbooks("Tableau de bord Varennes_2018.xlsm").Sheets("Tableau de bord").Cells(M, 2).Value <> "" Then
            Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes").Sheets("PAC").Cells(N, 1).Copy
            Workbooks("Tableau de bord Varennes_2018").Sheets("Tableau de bord").Cells(M, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            M = M + 1
        Else
            Workbooks("Tableau de bord Varennes_2018").Sheets("Tableau de bord").Rows(M).Insert Shift:=xlUp
            Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes").Sheets("PAC").Cells(N, 1).Copy
            Workbooks("Tableau de bord Varennes_2018").Sheets("Tableau de bord").Cells(M, 2).PasteSpecial Paste:=xlPasteValues
            M = M + 1
        End If
    End If
Next I

Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm").Close

End Sub

A+

Petite correction

Private Sub MAJ_PAC_Click()

Dim I As Integer ' Compteur
Dim N As Integer ' Colonne où coller
Dim M As Integer ' Colonne où copier

' Va chercher et ouvre le doc de PAC 2018
Workbooks.Open ("H:\DXA-DXB-SST\S-87 - Plan d'amélioration continue (PAC)\s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm")

N = 7 (considérant que la 1ere cellule à copier se situe en ligne 7)
M = 29

For N = 7 To (nb de lignes à parcourir)
    If Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes").Sheets("PAC").Cells(N, 1).Value <> "" Then
        If Workbooks("Tableau de bord Varennes_2018").Sheets("Tableau de bord").Cells(M, 2).Value <> "" Then
            Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes").Sheets("PAC").Cells(N, 1).Copy
            Workbooks("Tableau de bord Varennes_2018").Sheets("Tableau de bord").Cells(M, 2).PasteSpecial Paste:=xlPasteValues
            M = M + 1
        Else
            Workbooks("Tableau de bord Varennes_2018").Sheets("Tableau de bord").Rows(M).Insert Shift:=xlUp
            Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes").Sheets("PAC").Cells(N, 1).Copy
            Workbooks("Tableau de bord Varennes_2018").Sheets("Tableau de bord").Cells(M, 2).PasteSpecial Paste:=xlPasteValues
            M = M + 1
        End If
    End If
Next N

Workbooks("s_87_plan_amelioration_continue_DXA_3104_Varennes.xlsm").Close

End Sub

Merci beaucoup pour ton aide!

Rechercher des sujets similaires à "copier valeurs tableau longueur variable mise forme"