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 :

enregistrer certaines feuilles d'un fichier dans un nouveau


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 78
    Points : 24
    Points
    24
    Par défaut enregistrer certaines feuilles d'un fichier dans un nouveau
    Bonjour,
    voila j ai ce code la pour enregistrer mon fichier en Xls ou bien en pdf,mon probleme que avec ce code la j enregiste tout les feuilles que j`ai dans mon fichier.
    comment faire pour enregistrer que les feuilles que jai rempli .je crois avec If mais je ne sais pas comment .
    ma deuxieme question :c est comment definir plusieurs feuilles avec array .

    merci beaucouppppppppppppp




    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     
    Private Sub Btn_99_Druckausgabe_enregistrer_Click()
    Dim pfad
    Dim FileSaveName 'Pfad und Dateiname der zu sichernden Datei
    Dim intCounter As Integer
    Dim a As Byte
    Dim Blatt As Worksheet
    Dim wks As Worksheet
    Dim kunde, datum, Name, Firma, Abteilung, Inhalt, Seite, zeile
    x = Zahl
    For Each wks In ThisWorkbook.Worksheets
     
    Name = Worksheets("start").Range("Name")
    Firma = Worksheets("start").Range("Firma")
    Abteilung = Worksheets("start").Range("Abteilung")
    kunde = Worksheets("title_page").Range("Z_Titelblatt_Kunde")
    x = Zahl
    wks.PageSetup.RightFooter = _
    "Seite " & x & Chr(10) & "Gespeichert am: " & Format(Date, "dd.mm.yyyy")
    wks.PageSetup.LeftFooter = _
    Name & Chr(10) & Abteilung & Chr(10) & Firma
    wks.PageSetup.CenterFooter = _
    "&""Arial,Fett""&11CentricStor Checkliste " & Chr(10) & kunde
     
    Next wks
     
     
     
    For Each Blatt In Sheets
    Blatt.Visible = True
    Next Blatt
     
     
    'Datum aktualisieren
    Range("Z_Datum") = Date
     
    'Date$ liefert MM-TT-YYY. Die Bindestriche müssen raus
    datum = Left(Date$, 2) & Mid(Date$, 4, 2) & Mid(Date$, 7, 4)
     empfaenger = Range("Z_Titelblatt_Kunde")
     pfad = ActiveWorkbook.Path
     
          FileSaveName = Application.GetSaveAsFilename _
                (InitialFileName:=pfad & "\Checkliste_" & empfaenger & "_" & datum, _
    FileFilter:="EXCEL-Tabelle (*.xls), *.xls ,pdf datei (*.pdf),*.pdf")
    If FileSaveName <> False Then
            Select Case LCase$(Right$(FileSaveName, 3))
                Case "xls"
                    ActiveSheet.SaveAs Filename:=FileSaveName
                Case "pdf"
                    'deine Druckroutine für PDF
                     ActiveSheet.SaveAs Filename:=FileSaveName
     
    For intCounter = 9 To Sheets.Count - 6
          Sheets(intCounter).Select False
       Next intCounter
     
     
     
     
     Application.ActivePrinter = "Adobe Pdf auf Ne07:"
      ActiveWindow.SelectedSheets.PrintOut Copies:=1, printtofile:=True, PrToFileName:=InitialFileName, Collate:=True
     
     End Select
        End If
     
        On Error Resume Next 'Fehlerausgang, Weiter mit Löschen, wenn EMail abgelehnt wurde
      For a = 9 To Sheets.Count 'oder die Zahl bis wohin ausgeblendet werden soll
            Sheets(a).Visible = False
        Next a
     
    End Sub

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    comment je peuxx reformer mon code en selectionnant les feuilles que je veux enregistrer ,parceque j ai plusieures feuilles environ 50 .?


    merci

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Comment sélectionnes-tu les feuilles que tu veux passer en PDF.

    C'est toujours les mêmes ou à chaque fois ça change ?

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    a chaque fois ca change.
    j ai environ 20 dedans que je peux avec la boucle array definir mais les 30 autres j ai dedans dans leur user form un checkbox.
    c est a dire quand j active le checkbox il sera selectionner.

    voila j espere que je me suis bien exprimé.
    s il vous plait aidez moi et merci.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Donc tu dois avoir la possibilité de tester si ta feuille doit être enregistrer ou non à l'aide de son nom. Soit c'est dans ton array soit la valeur du ckeckbox est à true.

    T'as juste à créer une ptite méthode qui teste ça et te renvoie true si c'est bon. ET quand ça renvoie tru, t'enregistres ta feuille

    Ca va être compliké à insérer dans ton code ?

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    bonjour,
    C'est pas très clair, d'après ce que je comprend...
    Tu veux enrégistré le classeur (je suppose que fichier veux dire classeur) avec uniquement certaines feuilles sélectionnée ?

    Si oui, c'est plus simple de supprimé les feuilles non sélectionnée et ensuite d'enrégistrer le classeur, Non ?
    Si ce n'est pas cela, donne plus de renseignements.
    A+

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    non c est pas ca .je dois enregistrer tout le classeur.mais j ai 50 feuilles a peu pres.
    1) les 20 premiers feuilles je dois les enregistrer .
    2) les autres 30 feuilles ca depend de moi ,parceqe j ai un formulaire ou ja i mis 30 label plus 30 checkbox .
    3) c est a dire quand je coche 2 checkbox de ce formulaire je veux que c est deux feuilles seront aussi enregistrer plus les 20 premier.
    mais pas toute les 30 .

    merci de votre aide

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    je te confirme que c'est exactement ce que te propose leforestier
    tu fais un enregistre sous (saveas) et dans le nouveau classseur ainsi créé, tu suprimme les feuilles dont tu n'as pas besoin
    suppose qu tu veuille garder 21 et 25
    ta check box 25 est a true ainsi que la 21
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i = 20 to 50
    if chekbox (i) = false then sheet(i).delete
    end if
    activeworbook.save

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    il me fait une erreur de Chekbox ,il reconnait pas?

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    if chekbox (i) = false then

    cela doit venir de là. c'était un exemple. il faut que tu nomme tes checkbox avec le même nom (n'importe lequel)
    cbx20 cbx21 cbx22 cbx23 ....cbx50
    et ensuite, tu les controle avec la boucle en utilisant controls
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if me.controls("cbx" & i ).value = false then ..

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    bonjour mais comme je suis une debutante en excel vba j ai beaucoup de question.je m excuse alors si je pose des questions bete et merci.

    c esta dire je fais comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     For intcounter = 1 To sheets. count -6
    for i = 20 to 50
    if me.controls("che_20" & i ,che_21,che_22).value = false then sheet(i).delete
    end if
     activeworbook.save
    sheets(intcounter).select false
    next intcounter
    est ce que comme ca?

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    po du tout
    For intcounter = 1 To sheets. count -6 ça ça ne sert pas, ou du moins, je ne vois pas a quoi ça peut te servir
    for i = 20 to 50 la valeur de i va commencer a 20 et va aller jusqu'a 50
    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if me.controls("che_20" & i ,che_21,che_22).value = false then sheet(i).delete

    si tu écris ("che_20" & i, le systeme va traduire
    quand i = 20
    che_2020
    quand i = 21
    che_2021
    donc pour tenir compte de ton i tu dois écrire
    ("che_" & i
    et donc en fonction de la valeur de i, cela nous donnera che_20, che_21 etc etc jusqu'a che_50
    donc ton code pour supprimer les feuilles inutile aurait du etre
    for i = 20to50
    ifme.controls("che_" & i ).value = falsethen sheet(i).delete
    endif
    ce qui traduit pourrais se lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     pour i = 20 jusqu'a 50
    si la checkbox ("che_" & i ) n'est pas cochée alors feuille (i).supprimer
    passer au i suivant 

  13. #13
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Erreur... Les CheckBox ne sont pas à false/true mais à 0,1,2
    2 étant grisé et pratiquement pas employé.

    Rectifie ces données et cela devrait fonctionné.
    A+

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par LeForestier
    Bonjour,
    Erreur... Les CheckBox ne sont pas à false/true mais à 0,1,2
    2 étant grisé et pratiquement pas employé.

    Rectifie ces données et cela devrait fonctionné.
    A+
    ERREUR ! Si les checkBox sont dans un userform, ce qui semble être le cas, les valeurs des CheckBox sont bien True ou False !

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    J'ajoute mon grain de sel...
    Tu veux "imprimer" en pdf 20 pages, toujours les mêmes, + une ou deux ou trois pages variables... Est-ce bien ça ?
    Tes noms de pages ont-ils tous la même structure "che_" & Numéro ?
    As-tu un CheckBox pour chacune des feuilles "complémentaires" (en + des 20)
    Peux-tu les numéroter (ou est-ce fait) du même N° que tes pages ?
    Tu réponds et si oui à ces trois questions, tu as une solution très simple.
    A+

  16. #16
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Citation Envoyé par ouskel'n'or
    ERREUR ! Si les checkBox sont dans un userform, ce qui semble être le cas, les valeurs des CheckBox sont bien True ou False !
    Aaach.. Ces différences entre VB6 et VBA me tue.

  17. #17
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 78
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Citation Envoyé par ouskel'n'or
    Tu veux "imprimer" en pdf 20 pages, toujours les mêmes, + une ou deux ou trois pages variables... Est-ce bien ça ?
    oui je veut imprimer les 20 premiers pages qui sont toujours les memes + plusieurs page variable(ca depend de moi meme qu est ce que je coche ) et si j ai choisi par exemple deux page ,ca veux dire je dois immprimer toutes 22 .
    Citation Envoyé par ouskel'n'or
    Tes noms de pages ont-ils tous la même structure "che_" & Numéro ?
    .
    J ai creer un userform ou j ai mis ces pages qui varient, et chaque page et a cote son checkbox.
    voila lorsque je choisi une page je coche le checkbox et ca ma lance l userform de la page que j ai choisi.
    Citation Envoyé par ouskel'n'or
    Peux-tu les numéroter (ou est-ce fait) du même N° que tes pages ?
    mes checkbox des pages variées sont numeroter.

    merci

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Voilà un exemple de ce que tu peux faire. Je n'ai pas testé mais la méthode, elle, fonctionne. Tu changes "l'imprimante pdf" et tu adaptes les noms des checkbox. Ensuite tu nous dis.
    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
    Sub ImprimerTableauDeFeuillesDeCalculs()
    Dim Tableau(25) As String, NoFeuil As Byte, NoCheck As Byte
    Dim Recap As Variant
        ImprimanteParDefaut = Application.ActivePrinter
        ImprimantePDF = "Acrobat Distiller sur Ne01:" 'par exemple, tu adaptes
        Application.ActivePrinter = ImprimantePDF
     
        For NoFeuil = 1 To 20 'Tableau de tes vingt premières feuilles
            Tableau(NoFeuil) = "che_" & NoFeuil
        Next
     
        'Là, je suppose que tu as nommé tes CheckBox "CheckBox" & N° (tu adapteras)
        'On ajoute donc les feuilles dont le N° correspond à tes checkbox
        'checkbox numérotés ici de 21 à 50
        'S'ils sont numérotés différemment, tu devras ajouter un petit calcul
        For NoCheck = 21 To 50
            If Me.Controls("CheckBox" & NoCheck) Then
                NoFeuil = NoFeuil + 1
                Tableau(NoFeuil) = "che_" & NoCheck
            End If
        Next
        Recap = Tableau()
        Worksheets(Recap).PrintOut
        DoEvents
        Application.ActivePrinter = ImprimanteParDefaut
    End Sub
    Grâce aux indications précieuses de Michel (SilkyRoad) sans qui tout ça n'aurait pas été possible (et sans qui je n'avais pas réussi à reproduire tout seul ce que j'avais pourtant déjà fait )

    Edit
    J'ai dimensionné arbitrairement le tableau à 25 pour éviter les "Redim Preserve" mais tu peux modifier ça en fonction de tes besoins

  19. #19
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je viens de relire ton premier post... Donc, le code ci-dessus était pour enregistrer les feuilles voulues au format pdf.
    Pour enregistrer ces mêmes feuilles dans un nouveau classeur, tu as trois solutions :
    Une que je n'aime pas consistant à supprimer les feuilles indésirables et à enregistrer (saveas) ton fichier "sous" son nouveau nom
    La seconde consistant à utiliser SaveCopyAs Nouveau nom puis à effectuer la suppression des feuilles voulues... mais qui nécessite d'ouvrir ce nouveau fichier
    Et la troisième qui a ma préférence, qui consiste à ouvrir un nouveau classeur et à copier dedans les seules feuilles voulues. Suffit ensuite de l'enregistrer sous son nouveau nom.
    Faire gaffe : Si tu as des liaison entre feuilles ou entre classeurs, ces liaisons risquent de poser problème. A vérifier dans les trois cas.
    L'avantage de la troisième solution ? Avec très peu de modifs, la même routine peut servir pour créer ton pdf aussi bien que pour créer ton nouveau classeur. Dans un cas tu "imprimes" le tableau de tes feuilles, dans l'autre tu le copies.
    Tu dis
    A+

Discussions similaires

  1. Enregistrement et ouverture d'un fichier dans application JEE
    Par franco9 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 02/09/2012, 17h33
  2. Enregistrement de fichier dans un nouveau nom
    Par Cece06 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/06/2012, 11h18
  3. [VBA-E][2k7] Enregistrer une feuille d'un classeur dans un autre document
    Par tazamorte dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/04/2007, 18h15
  4. [VBA-E] Enregistrer la feuille d'un template dans un nouveau doc
    Par titouille dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/04/2007, 07h52
  5. enregistrer le chelin d'un fichier dans une table
    Par piscine dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/09/2004, 15h13

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