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

Macros et VBA Excel Discussion :

[Interop.Excel] Feuille vide


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 122
    Points : 2 235
    Points
    2 235
    Par défaut [Interop.Excel] Feuille vide
    Bonjour tout le monde,

    Un classeur créé avec Excel 2013 (avec extension xlsx) a été transféré via WebAPI vers un autre répertoire.

    Excel peut l'ouvrir sur ce nouveau répertoire, et affiche proprement le contenu, je suis donc porté à dire que le transfert s'est bien passé.

    Là où ça coince, c'est pour l'ouvrir ensuite sous C# avec Interop.Excel.

    Comme je soupçonne que je dois fournir un paramètre de format lors de l'ouverture du fichier, je pense que les spécialistes d'Excel sont plus à même de trouver la bonne documentation que ceux de C#, d'où le choix du forum.

    Je pense que la syntaxe utilisée est assez classique. Quand je dis que la syntaxe est classique, certes elle est exprimée pour C#, en VBA on aura plus quelque chose comme FOR EACH ... NEXT.
    Mais si la question est de préciser un style de classeur dans la commande d'ouverture, je pense que nous sommes bien d'accord que ça ne changera pas grand chose qu'on ait des accolades ou FOR EACH ... NEXT par la suite.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    xlWbk = xlApp.Workbooks.Open(strPath)
    xlWst = xlWbk.Worksheets[1]
    Excel.Range UR = xlWst.UsedRange
    foreach(Excel.Range row in UR.Rows)
        foreach(Excel.Range cell in row.Cells)
        {
        }
    }
    xlWbk.Close()

    Voilà, si quelqu'un peut m'aiguiller vers la doc de Workbooks.Open (je me suis retrouvé en face de celle de Open # pour les fichiers texte, qui n'aide pas beaucoup dans ce cas), ou le cas échéant m'indiquer une erreur qui échapperait à mon attention ...

  2. #2
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    bonjour,
    c'est parce que nous ne connaissons pas la syntaxe du C# que tu as omis les points virgule à la fin de chaque ligne!


    pour le reste je ne comprends pas ce que tu veux dire!
    Comme je soupçonne que je dois fournir un paramètre de format lors de l'ouverture du fichier, je pense que les spécialistes d'Excel sont plus à même de trouver la bonne documentation que ceux de C#, d'où le choix du forum.

  3. #3
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 122
    Points : 2 235
    Points
    2 235
    Par défaut
    En effet il faut des points-virgules à la fin des lignes.
    Dans le code ils y sont, c'est en recopiant d'une machine sur une autre pour poser la question que je les ai oubliés.
    La question est pourquoi n'ai-je rien dans la feuille ? À part son nom, mais ça fait léger.

    Une réponse supposée (peut-être à tort ?) est que je dois préciser le type de classeur dans les paramètres de Worksheets.Open. Je me rappelle avoir eu à faire ça il y a quelques années, mais ce n'est plus suffisamment net pour que je retrouve quelles sont les valeurs valides, et leurs significations.

    Alors je me suis dit que quelqu'un qui utilise la commande plus souvent saurait me retrouver ça.

  4. #4
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Nom : Sans titre.png
Affichages : 157
Taille : 21,3 Ko

  5. #5
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 122
    Points : 2 235
    Points
    2 235
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Nom : Sans titre.png
Affichages : 157
Taille : 21,3 Ko
    Oui, merci.
    En fait, l'intellisense me donne bien ça, mais ne me suggère aucune valeur pour Format.
    C'est vrai que j'aurais dû le préciser.
    Peut-être suffirait-il que je donne le nom d'une énumération, j'ai essayé avec le préfixe Excel, mais rien dans la liste ne me parle ...
    Comme c'est là avec les valeurs par défaut, j'ai comme l'impression qu'Interop essaie de traiter un fichier d'un autre type que celui auquel il a affaire, alors il ne trouve pas ses billes.
    Comme référence j'ai mis Excel = Microsoft.Office.Interop.Excel
    Dois-je aussi en mettre une autre ?
    Avec ça je pourrais tâtonner d'après les intitulés ; si des fois il y avait la doc qui va avec, ça serait splendide.
    Il me semble bien que ce soit Format, qui doive recevoir cette information ?

  6. #6
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 122
    Points : 2 235
    Points
    2 235
    Par défaut
    Bonjour,

    On dirait que j'ai trouvé ce que je cherchais, mais il n'est pas certain que ça s'utilise comme je croyais.

    https://docs.microsoft.com/fr-fr/dot...view=excel-pia

    Là-dedans je lis "Spécifie le format de fichier lors de l’enregistrement de la feuille de calcul."

    Ah, oui, mais moi c'est ouvrir un fichier existant, que je voulais faire.

    Je reviens à la doc de Workbook.Open :

    https://docs.microsoft.com/fr-fr/dot...view=excel-pia

    et je relis ce qui concerne le paramètre Format :

    Format
    Object Object

    Facultatif Object. Si Microsoft Excel ouvre un fichier texte, cet argument spécifie le caractère séparateur, comme illustré dans le tableau suivant. Si cet argument est omis, le séparateur actuel est utilisé.
    Ah, oui, mais c'est un classeur Excel, que j'ouvre. Donc ce paramètre ne s'applique pas, je m'étais accroché à ce qui m'arrangeait finalement.

    Est-ce que Interop.Excel est supposé reconnaître automatiquement le type de classeur ?
    Comment se fait-il que je n'aie pas le contenu de la feuille, alors ?

    J'ai passé plusieurs années sur Excel, mais il y a un moment, et on dirait que j'ai besoin de rafraîchir ce point.

    Y a-t-il quelqu'un de moins perplexe que moi dans la salle ?

  7. #7
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 122
    Points : 2 235
    Points
    2 235
    Par défaut
    Ça y est j'y suis, je suis complètement sur une fausse piste.

    J'ai fait tourner dans un projet console visant .Net Framework 4.6.1, le code que j'essayais de faire tourner dans mon projet WebAPI visant .Net Core 2.1

    Dans le projet console j'obtiens bien les contenus des cellules, alors que dans le projet WebAPI la propriété Cells.Count vaut 0, et si je vise une cellule avec des index, comme Cells[1, 1], j'obtiens Null.

    Ce n'est pas mon code de lecture ni Interop qui sont en cause, c'est le fait d'attaquer un répertoire de la machine par son chemin en dur, depuis le code d'un site web.

    Bon, en dehors du fait que ça me fait un bonnet d'âne, ça n'a rien à faire dans un forum Excel, désolé.

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

Discussions similaires

  1. [VB6] [Excel] Feuille dans une form, sans excel installé
    Par ro2v dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 05/05/2010, 12h45
  2. [Interop.Excel] method copy pour feuilles excel
    Par geeksideofme dans le forum C#
    Réponses: 3
    Dernier message: 22/12/2009, 12h24
  3. [VBA] [Excel] feuille masquée = pas de macro?
    Par Angel79 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/01/2006, 12h58
  4. Excel - Cellule vide en effectuant la somme
    Par spopo dans le forum Excel
    Réponses: 14
    Dernier message: 31/08/2005, 16h05
  5. [C#] [Excel] Feuille qui s'ouvre pas...
    Par lololefada dans le forum Windows Forms
    Réponses: 7
    Dernier message: 15/07/2004, 14h45

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