Paste special VBA

Guitou7933 Messages postés 3 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 2 juillet 2012 - 2 juil. 2012 à 06:43
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 2 juil. 2012 à 21:30
Bonjour,

Je me remet petit a petit a VBA et depuis 2 jours je bloque sur un point. J ai en effet un soucis au niveau de la fonction paste special que je n arrive pas a exploiter.
J ai un ensemble de donnees reparties sur differentes feuilles, j arrive deja a faire que l on puisse creer un nouveau fichier excel en choississant les feuilles que l on veut copier dans ce dernier. Je souhaitais qu en les copiant il n y ait pas de codes dans les cellules du nouveau fichier et que le code source VBA ne soit pas accessible ce aue j arrive a faire grace a un pastespecialValues. Cependaant le soucis est certaines cases (le haut de certaines colonnes) permettent de trier la colonne selon ce qu elle contient et je voudrais garder cette fonction mais elle disparait. Voila quel est mon soucis.
Je vous colle ici seulement la partie du code qui correspond au pastespecial car je ne sais pas si on peut joindre le fichier entier...

Sub copy()

Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

    'On créer l'objet Excel
    Set xlApp = CreateObject("Excel.Application")
    'On défini le nombre d'onglets (ici 5)
    
    'je demande a l utilisateur de choisir le nombre d onglet du nouveau fichier
    Sheet = InputBox("How many sheets do you want to create in this new document ?")
    
     
    xlApp.SheetsInNewWorkbook = Sheet
    
    
    'On ajoute un classeur
    Set xlBook = xlApp.Workbooks.Add
    
    'On donne un nom au classeur
    Name = InputBox("What is the name of the new document ?")
    
    xlBook.SaveAs ("" & Name)
   
        For i = 1 To Sheet
    'On créer l'objet onglet dans le nouveau classeur créé
    
    'je demande a l utilisateur de choisir le nom de la premiere feuille qu il souhaite copier
    ' les feuilles dans mon fichier de base s appellent Presentation, bsEnglish, etc...
    Sheet = InputBox("Name of the sheet to copy in this new sheet #" & i)
    
    Set xlSheet = xlBook.Worksheets(i)
    'On affecte un nom aux l'onglets
    xlSheet.Name = Sheet
    'on libère l'objet onglet pour pouvoir en créer un nouveau ... etc

     
    If xlSheet.Name = "Presentation" Then
        ThisWorkbook.Sheets(2).Activate
        ActiveSheet.Cells.copy
        xlSheet.Cells.PasteSpecial Paste:=xlPasteValues
    End If
       
       If xlSheet.Name = "bsEnglish" Then
        ThisWorkbook.Sheets(3).Activate
        ActiveSheet.Cells.copy
        xlSheet.Cells.PasteSpecial Paste:=xlPasteValues
    End If
    
    If xlSheet.Name = "plEnglish" Then
        ThisWorkbook.Sheets(4).Activate
        ActiveSheet.Cells.copy
        xlSheet.Cells.PasteSpecial Paste:=xlPasteValues
    End If
    
    If xlSheet.Name = "TB" Then
        ThisWorkbook.Sheets(5).Activate
        ActiveSheet.Cells.copy
        xlSheet.Cells.PasteSpecial Paste:=xlPasteValues
    End If
    
    If xlSheet.Name = "GL" Then
        ThisWorkbook.Sheets(6).Activate
        ActiveSheet.Cells.copy
        xlSheet.Cells.PasteSpecial Paste:=xlPasteValues
    End If
    
    If xlSheet.Name = "Details" Then
        ThisWorkbook.Sheets(7).Activate
        ActiveSheet.Cells.copy
        xlSheet.Cells.PasteSpecial Paste:=xlPasteValues
    End If
       
       
       
    Set xlSheet = Nothing
    Next
    
    
    
    'On rend le classeur visible
    xlApp.Visible = True
    
    '
  
    'On remet la propriété de l'application à 3 (par défaut)
    xlApp.SheetsInNewWorkbook = 3
    
  
End Sub

5 réponses

Guitou7933 Messages postés 3 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 2 juillet 2012
2 juil. 2012 à 06:45
PS : Si il vous manque des donnees pour m aider n hesitez pas a les demander. Merci pour votre aide future.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 juil. 2012 à 07:15
Bonjour,
La seule chose qui ait retenu mon attention est la suivante :
Cependaant le soucis est certaines cases (le haut de certaines colonnes) permettent de trier la colonne selon ce qu elle contient et je voudrais garder cette fonction mais elle disparait.

Car elle a une réponse immédiate : rien ne t'empêche, une fois faite la copie de l'ensemble sans les formules, de faire la copie normale (donc avec leur formule) de ces cellules-là !
Ouvre ton aide VBA sur la méthode copy (Range.Copy) et utilise son argument destination !
Exemple :
sheets("toto").range("B2:C3").copy destination:= sheets("titi").range("X1")

copiera intégralement dans la feuille titi, à partir de sa cellule X1, tout le contenu de la plage B2:C3 de la feuille toto.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Guitou7933 Messages postés 3 Date d'inscription vendredi 17 décembre 2010 Statut Membre Dernière intervention 2 juillet 2012
2 juil. 2012 à 07:59
Bonjour,
Merci pour ta reponse rapide. Neanmoins cela ne fonctionne pas, je me suis rendu compte qu il sagissait de filtres (je recupere le code de quelqu un que je tente d ameliorer).
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 juil. 2012 à 08:08
Des filtres et non des formules, maintenant ...
Bon ===>> intéresse-toi alors à la collection PivotFilters, à ses items, puis à sa méthode Add


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 juil. 2012 à 21:30
Salut

Après copie, tu sélectionnes la ligne où se trouvent tes entêtes de colonnes et tu vas dans le menu "Données, Filtrer, Filtre automatique" (2003) ou "Données, Trier et filtrer, Filtrer" (2007+)
Tu récupèreras ainsi la fonctionnalité sans réutiliser ton ancien classeur - tjrs délicat, ce genre de fonctions

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous