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é :
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!