Copier les valeurs d'un tableau de longueur variable sans la mise en forme Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
A
AlexandreR
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 15 janvier 2018
Version d'Excel : 2010

Message par AlexandreR » 19 janvier 2018, 20:53

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.
Avatar du membre
Jers19
Membre fidèle
Membre fidèle
Messages : 295
Appréciations reçues : 27
Inscrit le : 14 septembre 2017
Version d'Excel : 2010

Message par Jers19 » 19 janvier 2018, 22:18

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. :wink:
A+
A
AlexandreR
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 15 janvier 2018
Version d'Excel : 2010

Message par AlexandreR » 22 janvier 2018, 20:48

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?
Avatar du membre
Jers19
Membre fidèle
Membre fidèle
Messages : 295
Appréciations reçues : 27
Inscrit le : 14 septembre 2017
Version d'Excel : 2010

Message par Jers19 » 22 janvier 2018, 21:31

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
Avatar du membre
Jers19
Membre fidèle
Membre fidèle
Messages : 295
Appréciations reçues : 27
Inscrit le : 14 septembre 2017
Version d'Excel : 2010

Message par Jers19 » 22 janvier 2018, 21:33

J'ai oublié, pout trouver la dernière ligne d'une colonne (ici la colonne A)
LastLine = ActiveSheet.Range("A1048576").End(xlUp).Row
A
AlexandreR
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 15 janvier 2018
Version d'Excel : 2010

Message par AlexandreR » 22 janvier 2018, 21:37

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!
A
AlexandreR
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 15 janvier 2018
Version d'Excel : 2010

Message par AlexandreR » 22 janvier 2018, 22:16

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
Avatar du membre
Jers19
Membre fidèle
Membre fidèle
Messages : 295
Appréciations reçues : 27
Inscrit le : 14 septembre 2017
Version d'Excel : 2010

Message par Jers19 » 22 janvier 2018, 22:53

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
A
AlexandreR
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 15 janvier 2018
Version d'Excel : 2010

Message par AlexandreR » 23 janvier 2018, 14:13

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.
A
AlexandreR
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 15 janvier 2018
Version d'Excel : 2010

Message par AlexandreR » 23 janvier 2018, 14:52

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

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

Merci!
Capture.PNG
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message