IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[VSTO][C#/Excel] Comment Copier/Coller des cellules ?


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 24
    Points
    24
    Par défaut [VSTO][C#/Excel] Comment Copier/Coller des cellules ?
    Bonjour,

    J'ai des fichiers xls qui sont mis en prodction a un endroit donné. Ces fichiers, quand on les ouvre, demandent si il faut effectuer la mise a jour étant donné qu'ils utilisent des liens vers d'autres fichiers xls.
    J'aimerai que l'on me demande plus de faire cette mise a jour car les données de ces fichiers sont fixés une fois pour toute quand ils arrivent dans ce répertoire de production.

    ...donc la solution (qui marche bien manuellement ) est de tout selectionner, de faire un "copy" (copier) puis un "paste special" (coller special) ...et de dire qu'on ne colle que les valeurs... ainsi on se retrouve avec juste les valeurs et plus de liens.

    J'essai d'automatiser cela en Excel mais je m'en sors pas. Pas de probleme pour parcourir les repertoires, ouvrir les fichiers excel, parcourir les feuilles de ces fichiers, ... par contre je n'arrive pas a copier une feuille entiere pour pouvoir faire mon PasteSpecial par la suite.

    VOila ou j'en suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    foreach (Excel.Worksheet sh in ThisWorkbook.Sheets)
    {
        // je selectionne tout : ?
         sh.Cells.Select();
     
        // je recupere ma selection dans un object Range : ?
        Excel.Range selectedRange = (Excel.Range)ThisApplication.Selection;
     
       // j'effectue ma copie:
      // ????
     
       // je fais mon paste special:	
      selectedRange.PasteSpecial(Excel.XlPasteType.xlPasteValues,Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false);
     
        // je sauve :			
       ThisWorkbook.Save();

    Si vous avez une idee de comment effectuer un copier coller en C# ca m'interesse car je m'en sors pas.

    Merci d'avance

    Gael

  2. #2
    Nouveau membre du Club Avatar de yoyann
    Inscrit en
    Juillet 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Salut,

    Pour ce problème tu as essayé de faire une nouvelle macro Excel ?

    - Tu lances une nouvelle macro
    - tu fais la manip (le copier coller)
    -tu arretes l'enregistrement de la macro
    -tu regarde la code que Excel a généré puis tu l'adaptes pour qu'il soit à la syntaxe C#.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par yoyann
    Salut,

    Pour ce problème tu as essayé de faire une nouvelle macro Excel ?

    - Tu lances une nouvelle macro
    - tu fais la manip (le copier coller)
    -tu arretes l'enregistrement de la macro
    -tu regarde la code que Excel a généré puis tu l'adaptes pour qu'il soit à la syntaxe C#.
    ouais c'est exactement ce que j'ai fait mais j'arrive pas a adapter.
    Par ex la macro Excel je fais un truc du genre :
    maSelection.Copy
    PasteSpecial(....)

    ...et en C# deja je ne trouve pas de fonction Copy sans parametre je dois utiliser un truc du genre Copy(string destination)


    Dans le pire des cas je peux toujours mettre ma macro dans tous mes fichiers excel et appeler cette macro a partir de mon prog en C# ...mais bon c'est beaucoup moins bien j'aurai pas mal de maintenance

    En tout cas merci pour tes conseils

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    Voila le code que la macro me genere pour faire un copier coller de toute ma feuille pour ne garder que les valeurs et plus les formules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub Macro1()
        Cells.Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= False, Transpose:=False
    End Sub
    Je pensais pouvoir transcrire ca en C# assez facilement mais c'est pas le cas

  5. #5
    Nouveau membre du Club Avatar de yoyann
    Inscrit en
    Juillet 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Au lieu de faire une selection tu affectes à une variable range la plage de cellule à copier.
    Puis tu fais un copy, nomVariableRange.copy();
    et après tu peut faire un paste special sur la cellule en destination.

    En fait pour être plus clair , au lieu de faire les selections comme sur l'enregistrement de la macro, tu donnes explicitement les plages de cellules.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par yoyann
    Au lieu de faire une selection tu affectes à une variable range la plage de cellule à copier.
    Puis tu fais un copy, nomVariableRange.copy();
    et après tu peut faire un paste special sur la cellule en destination.

    En fait pour être plus clair , au lieu de faire les selections comme sur l'enregistrement de la macro, tu donnes explicitement les plages de cellules.
    Le probleme est que je ne sais pas a l'avance dans le fichier quelles plages de données sont utilisées donc je dois faire un copy paste sur l'ensemble des plages de données.

    ...mais c'est pas grave je m'en suis sorti autrement :
    _ j'ouvre le fichier excel
    _ j'insere une macro excel dans mon fichier excel dans un nouveau module
    (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    VBIDE.VBComponent oModule;
    String sCode;
     
    oModule = ThisWorkbook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule);
    oModule.Name = "copyPasteModule";
     
    sCode = 
    "Sub MacroCopyPasteSpecial()\r\n" +
    "   nbSheets = Sheets.Count\r\n" +
    "	For i = 1 To nbSheets\r\n" +
    "		Sheets(i).Visible = True\r\n" +
    "		Sheets(i).Select\r\n" +
    "		Cells.Select\r\n" +
    "		Application.CutCopyMode = False\r\n" +
    "		Selection.Copy\r\n" +
    "		Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False\r\n" +
    "	Next i\r\n" +
    "	If (nbSheets > 1) Then\r\n" +
    "		For j = 2 To nbSheets\r\n" +
    "			Sheets(j).Visible = False\r\n" +
    "		Next j\r\n" +
    "	End If\r\n" + 
    "	Sheets(1).Select\r\n" +
    "	Range(\"A1\").Select\r\n" +
    "End Sub\r\n" +
    "Sub Auto_Open()\r\n" +
    "	Call MacroCopyPasteSpecial\r\n" +
    "End Sub\r\n";
     
    oModule.CodeModule.AddFromString(sCode);
    )
    _ j'execute cette macro
    _ je supprime le module donc la macro
    _ je sauve

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] comment copier coller des cellules sans prendre en compte les lignes cachées
    Par bboy-eazy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/09/2014, 15h20
  2. [XL-2010] Problème macro copier-coller des cellules dans deux feuilles Excel
    Par benadry dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/04/2014, 19h05
  3. [XL-2003] Copier coller des cellules
    Par damien29 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/04/2011, 14h28
  4. Réponses: 4
    Dernier message: 28/04/2011, 15h50
  5. Copier coller des cellules excel ?
    Par Angelssen dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/02/2010, 12h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo