Collage spécial valeur
Bonjour,
J'ai décider d'automatiser le remplissage d'une feuille excel à partir d'une autre. Les étapes de mon code sont
1) Ouverture du fichier source via l'explorateur widows
2) Copie de colonnes contenues dans un onglet en fonction de leur entête
3)Collage dans un onglet désigné du fichier de destination.
Mon problème se pose dans cette étape 3 je ne parviens pas à coller en valeur sans prendre en compte le formules
Ci dessous le code
Sub ImporterBudget()
Dim Fichier, WbkCopy As Workbook, WbkColle As Workbook
Dim Colonnes(), Col As Integer, Resultat As Variant
'On attribue à la variable WbkColle le fichier actuel (celui qui contient la macro)
Set WbkColle = ThisWorkbook
'Nom des entêtes de colonnes à importer
Colonnes = Array("Code nana", "Métier", "Produit", "Client")
'Sélection du fichier
Fichier = Application.GetOpenFilename("Fichiers Excels, *.xls*")
'En cas de clic sur "ANNULER"
If Fichier <> False Then
'On ouvre le fichier en question
Set WbkCopy = Workbooks.Open(Fichier)
With WbkCopy.Sheets("Import")
'Boucle sur toutes les entêtes des colonnes
For Col = 1 To .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
'teste si l'entête correspond à un des noms des colonnes à copier
Resultat = Application.Match(.Cells(1, Col), Colonnes, 0)
'Si l'entête est trouvée (colonne à copier)
If Not IsError(Resultat) Then
'Copié - Collé ==>NOM de la feuille ou il faut coller
.Columns(Col).Copy WbkColle.Sheets("Commande").Cells(1, Cells.Columns.Count).End(xlToLeft).Offset(0, 1)
End If
Next Col
End With
WbkCopy.Close
End If
Set WbkCopy = Nothing
Set WbkColle = Nothing
End SubJ'ai mis des commentaires pour que ce soit parlant
je veux donc adapter le code de collage suivant: .Columns(Col).Copy WbkColle.Sheets("Commande").Cells(1, Cells.Columns.Count).End(xlToLeft).Offset(0, 1)
pour qu'il rapatrie les valeurs sans les formules
Je vous remercie d'avance de votre aide
Bonjour,
Avec cette ligne tu colles tout !
Il faut dissocier :
.Columns(Col).Copy
WbkColle.Sheets("Commande").Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1).PasteSpecial xlPasteValuesc'est rigolo parce que pendant des heures j'ai insisté en faisant :
.Columns(Col).Copy.WbkColle.Sheets("Commande").Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1).PasteSpecial xlPasteValues
Cela marche parfaitement. Tu me sauve la vie là.
Enorme merci.
La méthode Copy admet un argument Destination, qui permet de coller directement, mais sans option. Pour un collage spécial, il faut ajouter une ligne de commmande...
Cordialement.