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

WinDev Discussion :

Changer la feuille courante dans un fichier excel copié [WD21]


Sujet :

WinDev

  1. #1
    Invité
    Invité(e)
    Par défaut Changer la feuille courante dans un fichier excel copié
    Bonjour la famille!

    J'ai un fichier excel source avec un certain nombre de feuilles.
    Dans mon interface, l'utilisateur va sélectionner la feuille qui va servir de référence pour lancer un traitement (la feuille ayant pour nom TOTO), dans mon code, je copie le fichier source en fichier cible, jusque là, c'est ok.
    Ce que j'aimerais faire, c'est que je voudrais supprimer toutes les feuilles qui ne vont pas servir de feuille source (donc toutes les feuilles n'ayant pas pour nom TOTO).
    Dans le dernier test que j'ai fait, je suis passé d'un classeur de 4 feuilles à 2 feuilles, la feuille source et la feuille qui a été sélectionnée par l'utilisateur, je n'ai pas réussi à "forcer" la sélection de la feuille source, bien que j'ai essayé avec les objets automations.

    Mon code :
    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
    l_MonExcel est un xlsDocument=xlsOuvre(l_nouveauFichier)  //l_nouveauFichier = nom du nouveau classeur
    l_nbFeuilles est un entier=xlsNbFeuille(l_MonExcel)
     
    SI l_nbFeuilles>1 ALORS
    	xl est un objet OLE "Excel.Application"
    	xl>>visible=OLEFaux
    	xl>>workbooks>>open(l_nouveauFichier)
    	xl>>Sheets("TOTO")>>Select()
    	xl>>Activeworkbook>>save
    	xl>>workbooks>>close
    	xl>>quit
     
    	//je supprime les feuilles qui ne m'intéressent pas
    	POUR loop_i=1 _A_ l_nbFeuilles
    		SI xlsFeuilleEnCours(l_MonExcel,loop_i) ALORS
    			SI l_MonExcel..NomFeuille<>"TOTO" ALORS
    				xlsSupprimeFeuille(l_MonExcel,loop_i)
    			FIN
    		FIN
    	FIN
    	xlsSauve(l_MonExcel)
    FIN
    xlsFerme(l_MonExcel)
    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir

    A priori, c'est l'erreur classique.
    Comme avec les tables et tableaux, il faut entreprendre les suppressions à partir de la dernière feuille et non de la première.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI xlsFeuilleEnCours(l_MonExcel,loop_i)
    Contrôlez vos erreurs, vous devez avoir une erreur du style feuille inexistante au moment où votre parcours de suppression avorte.

    Ce que vous décrivez correspond pile poli à cette hypothèse :

    Suppression 1 2 3
    1ère feuille 1 2 3
    2e feuille 2 3 4
    3e feuille 3 4 -
    4e feuille 4 - -

    Après la suppression de 2 feuilles, vous voulez vous positionner sur le 3e qui n'existe plus.
    Erreur de xlsFeuilleEnCours, sortie de votre boucle.
    Et il vous reste 2 feuilles sur les 4.

    Bon travail

    Hemgé

    NB :
    1. Dans le code que vous nous communiquez, vous n'ouvrez pas le document en mode écriture (constante xlsEcriture), mais je suppose qu'en réalité vous le faites puisque vous avez pu supprimer des lignes.
    2. Vous n'avez pas besoin des lignes 5 à 11.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour, j'ai procédé par objets automations, j'ai supprimé les feuilles non désirées à l'aide de leurs noms, du coup, j'ai trouvé mon bonheur.
    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
    l_MonExcel est un xlsDocument=xlsOuvre(l_nouveauFichier)  //l_nouveauFichier = nom du nouveau classeur
    l_nbFeuilles est un entier=xlsNbFeuille(l_MonExcel)
    l_nomFeuille est une chaîne=""
    SI l_nbFeuilles>1 ALORS
    	xl est un objet OLE "Excel.Application"
    	xl>>visible=OLEFaux
    	xl>>workbooks>>open(l_nouveauFichier)
     
    	POUR loop_i=1 _A_ l_nbFeuilles
    		//dans le champ COMBO_FEUILLEBUDGETEXCEL, je liste le nom de toutes les feuilles présentes dans le fichier excel sélectionné
    		//la position de la combo COMBO_FEUILLEBUDGETEXCEL définit la feuille source
    		l_nomFeuille=COMBO_FEUILLEBUDGETEXCEL[loop_i]..ValeurAffichée
    		SI loop_i<>COMBO_FEUILLEBUDGETEXCEL ALORS
    			xl>>Worksheets(l_nomFeuille)>>Delete
    		SINON
    			xl>>Worksheets(l_nomFeuille)>>Name=l_FeuilleSource //je renome la feuille source
    		FIN
    	FIN
     
    	xl>>Activeworkbook>>save
    	xl>>workbooks>>close
    	xl>>quit
    FIN

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut Pourquoi faire simple si on peut faire ...
    Bonjour

    Avez-vous testé ceci, comme suggéré dans ma première intervention, qui a le merite de rester du WD pur, sans surcharge ?
    Il serait intéressant de comparer les deux solutions en terme de temps et ressources consommés, mais c'est un peu lourd de créer 1.000 ou 10.000 classeurs XL.

    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
    l_MonExcel est un xlsDocument=xlsOuvre(l_nouveauFichier, xlsEcriture)  //l_nouveauFichier = nom du nouveau classeur
    l_nbFeuilles est un entier=xlsNbFeuille(l_MonExcel)
     
    SI l_nbFeuilles>1 ALORS
    	xl est un objet OLE "Excel.Application"
    	xl>>visible=OLEFaux
    	xl>>workbooks>>open(l_nouveauFichier)
    	xl>>Sheets("TOTO")>>Select()
    	xl>>Activeworkbook>>save
    	xl>>workbooks>>close
    	xl>>quit
     
    	//je supprime les feuilles qui ne m'intéressent pas
    	POUR loop_i=1 _A_ l_nbFeuilles
    	POUR loop_i= 1 _A_ l_nbFeuilles Pas -1 
    	//Mieux encore POUR loop_i= 1 _A_ xlsNbFeuille(l_MonExcel) Pas -1 
            //avec la syntaxe _A_ la variable ou la fonction qui suit n'est évaluée qu'une fois et donc pas besoin de passer par une variable que vous n'utiliser qu'une fois.
            //Cela s'applique également dans votre nouveau code.
    		SI xlsFeuilleEnCours(l_MonExcel,loop_i) ALORS
    			SI l_MonExcel..NomFeuille<>"TOTO" ALORS
    				xlsSupprimeFeuille(l_MonExcel,loop_i)
    			FIN
    		FIN
    	FIN
    	xlsSauve(l_MonExcel)
    FIN
    xlsFerme(l_MonExcel)
    Non testé, d'accord, mais a priori correct.
    Vous n'avez toujours aucun traitement d'erreur.


    Bonne semaine,

    Hemgé

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

Discussions similaires

  1. [XL-2007] Copie d'une feuille d'un fichier excel fermé dans un fichier excel ouvert
    Par LloydIrving dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/02/2016, 10h21
  2. Déplacer une image d'une feuille vers une autre dans un fichier Excel
    Par helenaide dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/10/2011, 14h27
  3. [XL-2003] boucle sur 12 feuille dans un fichier excel
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/06/2010, 06h18
  4. 40 Feuilles dans 1 fichier Excel = Autant de Fichier .CSV
    Par Nissartis dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/03/2008, 15h53
  5. Réponses: 2
    Dernier message: 16/03/2006, 17h40

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