[VBA_Excel] Copier feuille classeur A vers B

Résolu
chtilou Messages postés 1704 Statut Membre -  
chtilou Messages postés 1704 Statut Membre -
Bonsoir à tous.

Je cale sur ce problème:
Sub NouvNum()
V = "C:\Devis Factures\Factures\"
W = Cells(10, 2) 'date
X = Cells(10, 3) 'numéro d'ordre

Application.Workbooks.Add
ActiveWorkbook.SaveAs Filename:= _
V & W & X & ".xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
'concatène la directorie et le nom de fichier

Jusqu'à la pas de problème.
Workbooks("C:\Devis Factures\Facture vierge.xls").Worksheets("Feuil1").Range("A1:H49").Copy _
Destination:=Workbooks(V & W & X & ".xls").Worksheets("Feuil1").Range("A1")
End Sub

C'est la que ça coince. Après l'ajout des 2 dernières lignes, plus possible de sauvegarder.

Vos modifications non pu étre enregistrées dans "facture vierge.xls0" en raison d'une violation de partage. Essayez d'enregistrer vos modifications dans un fichier différent. + Lancement de l'antivirus.
+ création d'un fichier du genre 97470000 (sans extension).

Une idée?

20 réponses

Résumé de la discussion

Une difficulté de sauvegarde survient en VBA Excel lorsque le script écrit dans un fichier nommé dynamiquement (avec date et numéro) et copie des données entre classeurs, entraînant une violation de partage. La solution proposée crée un nouveau classeur via Set newWorkBook = Application.Workbooks.Add(xlWBATWorksheet), le sauvegarde sous le nom construit par les variables V, W et X, puis copie la plage A1:H49 de Facture vierge.xls vers le nouveau fichier. Enfin, le code ferme le classeur source après le transfert et nettoie le presse-papiers pour éviter d’autres blocages et préserver l’intégrité des données. Fautes potentielles et variantes selon version d’Excel peuvent subsister, mais l’approche modulaire permet d’isoler le processus d’enregistrement et de transférer les données sans perturber le fichier original.

Bobot (l'IA à votre service)
  1. chtilou Messages postés 1704 Statut Membre 523
     
    Voici ce que j'ai fait au final:

    Sub NouvNum()

    Dim newWorkBook As Workbook
    Dim V As String
    Dim W As String
    Dim X As String
    Dim Z As String

    V = "C:\Devis Factures\Factures\" 'a modifier si besoin
    W = Sheets(1).Cells(10, 2) 'date
    X = Sheets(1).Cells(10, 3) 'numéro d'ordre
    Z = "Facture vierge" 'a modifier si besoin

    'on déclare un nouveau fichier Excel contenant 1 feuille
    Set newWorkBook = Application.Workbooks.Add(xlWBATWorksheet)

    newWorkBook.SaveAs Filename:=V & W & X & ".xls", FileFormat:=xlNormal _
    , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
    CreateBackup:=False

    Workbooks(Z & ".xls").Sheets("Feuil1").Range("A1:H49").Copy
    Workbooks(W & X & ".xls").Worksheets("Feuil1").Select

    Selection.PasteSpecial Paste:=xlPasteFormats ' Formats de cellule
    Selection.PasteSpecial Paste:=xlPasteColumnWidths ' Largeurs de colonne
    ActiveSheet.Paste ' Texte
    Application.CutCopyMode = False ' Vide le presse papier

    Workbooks(Z & ".xls").Close False 'Fermeture de Facture vierge.xls

    End Sub

    Merci encore à tous. Et au plaisir. ;-)
    1
  2. chtilou Messages postés 1704 Statut Membre 523
     
    Personne?
    Finalement ça me rassure un peu.
    Donc c'est pas si simple.
    0
    1. onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention   120
       
      Salut, ne serait-ce pas plus simple d'utiliser le "copier une feuille" d'un classeur à l'autre ?
      0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    C'est pas trop compliqué non plus ... quand on sait faire ;o)
    Sub NouvNum()
    Dim newWorkBook As Workbook
    Dim V As String
    Dim W As String
    Dim X As String
    
     V = "C:\Devis Factures\Factures\"
     W = Sheets(1).Cells(10, 2) 'date
     X = Sheets(1).Cells(10, 3) 'numéro d'ordre
    
        'on déclare un nouveau fichier Excel contenant 1 feuille
        Set newWorkBook = Application.Workbooks.Add(xlWBATWorksheet)
        
        '***********************************************************
        'on déclare un nouveau fichier Excel contenant 3 feuilles
    '    Set newWorkBook = Application.Workbooks.Add
        '***********************************************************
        
        'on copie dans le nouveau classeur
        ThisWorkbook.Worksheets("Feuil1").Range("A1:H49").Copy _
                Destination:=newWorkBook.Worksheets("Feuil1").Range("A1")
        'on sauvegarde le nouveau classeur
        newWorkBook.SaveAs Filename:=V & W & X & ".xls", FileFormat:=xlNormal _
                , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
                CreateBackup:=False
        
    End Sub

    Bon courage et bonne continuation...

    ;o)

    polux
    0
  4. chtilou Messages postés 1704 Statut Membre 523
     
    Bonjour et merci d'essayer de m'aider.

    Polux31:
    Avec ta technique j'obtiens un résultat correct (tout comme avec la mienne) mais impossible d'enregistrer.

    onesdf
    Je suis ouvert à toutes suggestion.

    A votre écoute.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Etonnant, j'ai testé. Je copie bien la zone et je sauvegarde le fichier ... qu'est-ce qui ne marche pas exactement, j'ai peut être pas tout compris ?

    ;o)
    0
    1. chtilou Messages postés 1704 Statut Membre 523
       
      j'ai peut être pas tout compris ?
      Ou plus certainement je m'exprime mal.

      Voici le classeur en question. ;-)

      0
  7. Polux31 Messages postés 7219 Statut Membre 1 204
     
    oui et où est le problème ??

    J'ai bien fait une copie dans la zone de factures dans un nouveau classeur et je l'ai enregistré ...

    Peux tu me dire ce qui ne va pas ?
    0
    1. chtilou Messages postés 1704 Statut Membre 523
       
      Tu veux dire que tu as réussi à enregistrer "Facture vierge"?
      Chez moi ça coince. :-(
      Si c'est le cas merci de me le poster en retour.

      Cordialement.

      PS: Ou est l'erreur? Avec ma version de base ça marche chez toi?
      0
      1. Polux31 Messages postés 7219 Statut Membre 1 204 > chtilou Messages postés 1704 Statut Membre
         
        j'enregistre bien le nouveau fichier avec la date et le n° de facture, je n'ai pas enregistré "Facture vierge". Tu veux sauvegarder "Facture vierge" sans enregistrer les changement ?
        0
      2. chtilou Messages postés 1704 Statut Membre 523 > Polux31 Messages postés 7219 Statut Membre
         
        j'enregistre bien le nouveau fichier avec la date et le n° de facture
        Moi aussi. Jusqu'à la d'accord.

        Tu veux sauvegarder "Facture vierge" sans enregistrer les changement ?
        Je voudrai sauvegarder le travail sur "Facture vierge" une fois les lignes de prog pour copier la plage et le compteur à zéro = OK
        C'est la que je bloque.
        Quand j'ajoute les lignes le boulot se fait bien, mais impossible de le sauvegarder dans l'état. :-(
        0
  8. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Je voudrai sauvegarder le travail sur "Facture vierge" une fois les lignes de prog pour copier la plage et le compteur à zéro = OK

    Désolé, mais je ne vois pas du tout ce que tu veux faire ...
    "sauvegarder une fois les lignes de prog" ???
    "copier la plage et le compteur à zéro = OK" ??? quelle plage et quel compteur à zéro = OK ???

    Je ne comprends pas du tout là
    0
  9. chtilou Messages postés 1704 Statut Membre 523
     
    Lorsque tu regarde dans "thisWorkBook" j'incrémente un numéro à chaque ouverture du classeur "Facture vierge"
    = le compteur (C10).

    La sauvegarde de "Facture vierge" se passe trés bien même en remettant C10 à zéro.

    Par contre dés que j'ajoute:

    Workbooks("C:\Devis Factures\Facture vierge.xls").Worksheets("Feuil1").Range("A1:H49").Copy _
    Destination:=Workbooks(V & W & X & ".xls").Worksheets("Feuil1").Range("A1")

    Plus moyen de sauvegarder "Facture vierge".

    J'ai le droit au message suivant:
    Vos modifications non pu être enregistrées dans "facture vierge.xls" en raison d'une violation de partage...
    0
  10. Polux31 Messages postés 7219 Statut Membre 1 204
     
    j'ai fait ça et j'enregistre bien "facturevierge" avec un nouveau numéro :
    Sub NouvNum()
    Dim newWorkBook As Workbook
    Dim V As String
    Dim W As String
    Dim X As String
    
     V ="C:\Devis Factures\Factures\"
     W = Sheets(1).Cells(10, 2) 'date
     X = Sheets(1).Cells(10, 3) 'numéro d'ordre
    
        'on déclare un nouveau fichier Excel contenant 1 feuille
        Set newWorkBook = Application.Workbooks.Add(xlWBATWorksheet)
        
        '***********************************************************
        'on déclare un nouveau fichier Excel contenant 3 feuilles
    '    Set newWorkBook = Application.Workbooks.Add
        '***********************************************************
        
        'on copie dans le nouveau classeur
        ThisWorkbook.Worksheets("Feuil1").Range("A1:H49").Copy _
                Destination:=newWorkBook.Worksheets("Feuil1").Range("A1")
        'on sauvegarde le nouveau classeur
        newWorkBook.SaveAs Filename:=V & W & X & ".xls", FileFormat:=xlNormal _
                , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
                CreateBackup:=False
                
        ThisWorkbook.Save
        
    End Sub


    Je comprends très bien l'incrémentation du n° de facture dans WorkBook_Open(), mais je ne vois pas l'utilité de faire une sauvegarde immédiatement après ... Il serait préférable de gérer la sauvegarde dans BeforeClose(), ce qui garantit la sauvegarde automatique à la fermeture.

    ;o)
    0
  11. chtilou Messages postés 1704 Statut Membre 523
     
    Re,
    je viens de faire un copier coller et toujours le même problème.

    Il serait préférable de gérer la sauvegarde dans BeforeClose()
    Trés bonne suggestion d'autant que le but et de fermer "Facture vierge" dés l'ouverture de la facture.

    Je pige toujours pas cette histoire de conflit d'autant que l'antivirus se déclenche en même temps (Pack Sécurité Plus de chez le 9).

    Toutefois si tu arrives à le sauvegarder, je suis preneur. ;-)
    0
  12. chtilou Messages postés 1704 Statut Membre 523
     
    Voici ce que je reçois dés que je sélectionne ton lien:

    Le format du fichier que vous tentez d'ouvrir, "...factures.xls" est différent de celui spécifié par l'extension de fichier. Assurez vous que le fichier n'est pas endommagé et qu'il provient d'une source fiable avant de l'ouvrir. Souhaitez vous ouvrir le fichier maintenant?

    Oui ou Non

    Oui

    Ouverture d'un classeur vierge nommé "...factures.xls".

    Protection virus et spyware: désactivée.
    Protection internet: autoriser tout.
    Contrôle courrier indés.: désactivée.

    :-( Je commence à m'orienter vers la solution "Kleenex".
    0
  13. Polux31 Messages postés 7219 Statut Membre 1 204
     
    tu as quel version d'Excel ?

    Ensuite il faut mettre le niveau sécurité mini, sinon les macors beug
    0
  14. chtilou Messages postés 1704 Statut Membre 523
     
    tu as quel version d'Excel ?
    2007

    Ensuite il faut mettre le niveau sécurité mini, sinon les macors beug
    Protection virus et spyware: désactivée.
    Protection internet: autoriser tout.
    Contrôle courrier indés.: désactivée.

    Que puis-je faire de moins?

    Merci de te soucier de ce problème qui me vient du forum "bureautique" et qui commence à m'obséder. ;-|

    PS: ça fait un petit mois que je commence à bidouiller en VBA, macros... donc mon erreur est peut-être à la base.
    0
  15. Polux31 Messages postés 7219 Statut Membre 1 204
     
    ok j'ai la version 2003, donc tu devrais pouvoir l'ouvrir sans problème ... je ne comprends pas ... donne moi ton mail en MP, on peux essayer par là ... des fois que ...
    0
  16. onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention   120
     
    Re,

    Désolé mais j'ai été beaucoup pris cet après-midi.

    Je pensais que tu pouvais mettre ce code là :

    Workbooks("Facture vierge").Sheets("Feuil1").Copy Before:=Workbooks(W & X & ".xls").Sheets(1)

    à la place de ton

    Workbooks("C:\Devis Factures\Facture vierge.xls").Worksheets("Feuil1").Range("A1:H49").Copy _
    Destination:=Workbooks(V & W & X & ".xls").Worksheets("Feuil1").Range("A1")

    Le problème c'est que celà copie non seulement les données qui sont dans la feuille, mais aussi le bouton "Nouvelle facture" et le code VBA de ta feuille. Donc c'est pas top.

    Je ne sais pas si ca fait avancer le schmilblick, mais je recois un message d'erreur (indice hors selection) lorsque je mets le chemin complet du classeur d'origine ("C:\Devis Factures\Facture vierge.xls") et de celui de destination (V & W & X & ".xls"). Par contre lorsque je mets ceci :

    Workbooks("Facture vierge").Sheets("Feuil1").Range("A1:H49").Copy _
    Destination:=Workbooks(W & X & ".xls").Worksheets("Feuil1").Range("A1")

    Ca fonctionne.
    (Je suis sous excel 2000)
    0
    1. chtilou Messages postés 1704 Statut Membre 523
       
      Le problème c'est que celà copie non seulement les données qui sont dans la feuille, mais aussi le bouton "Nouvelle facture" et le code VBA de ta feuille. Donc c'est pas top.
      Effectivement non c'est pas le top. C'est pour cette raison que je recherche du coté de "copy". Dans un premier temps je passai par "save as"

      Par contre lorsque je mets ceci : Ca fonctionne.
      Je commence à croire que le problème vient de l'antivirus. :-(

      Polux31 à tenté ce qu'il pouvait mais à priori c'est chez moi que ça bogue.

      Ce qui me gave c'est que je ne vois pas comment faire. ;-( (pour l'instant)
      Si tu as une idée...
      0
      1. onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention   120 > chtilou Messages postés 1704 Statut Membre
         
        Effectivement non c'est pas le top. C'est pour cette raison que je recherche du coté de "copy". Dans un premier temps je passai par "save as"

        Tu peux déplacer ton code de la feuil1 vers un module et ajouter un bouton dans ta barre d'outils (Bouton droit sur une barre d'outils, Personnalisé, onglet Commandes, Macros, Bouton personnalisé et y associer le code de ton module.

        Je commence à croire que le problème vient de l'antivirus. :-(

        Tu ne peux pas le désactiver temporairement pour être fixé ?
        0
  17. chtilou Messages postés 1704 Statut Membre 523
     
    Je confirme il s'agissait bien d'un problème lié à l'antivirus.

    Solution: Désactiver l "analyse en temps réel".

    Merci bien les copains.

    Au plaisir de pouvoir vous renvoyer l'ascenseur en bureautique. ;-)

    PS: J'ai envoyé ce message une première fois à 17h15 (à peu prés), et je viens de me rendre compte qu'il n'est pas passé.
    0
    1. onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention   120
       
      Mouais, c'est quand même bof de désactiver l'analyse en temps réel. Tu dois pouvoir ajouter une exclusion quelque part pour ton fichier excel non ?
      0
      1. chtilou Messages postés 1704 Statut Membre 523 > onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention  
         
        Disons que je ne suis pas spécialement calé de ce coté mais en attendant mieux... :-|
        0
      2. onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention   120 > chtilou Messages postés 1704 Statut Membre
         
        Disons que je ne suis pas spécialement calé de ce coté mais en attendant mieux... :-|

        En attendant mieux tu risques le pire !

        J'imagine qu'il est possible avec ton antivirus de lui spécifier que tu ne souhaites pas effectuer d'analyse sur ce fichier en particulier comme c'est le cas sur le mien (avast)

        Demandes donc aux as du forum sécurité à l'occasion, il y en a certainement un dans le tas qui sera à même de t'aider car je ne connais pas le pack sécurité de 9.
        0
      3. chtilou Messages postés 1704 Statut Membre 523 > onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention  
         
        Bonne idée.

        Une autre question toujours sur le même sujet pendant la copie la largeur des colonnes F et G n'est pas conservée.
        Comment faire pour conserver la taille des cellules...?
        0
      4. onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention   120 > chtilou Messages postés 1704 Statut Membre
         
        En faisant un collage spécial
            Workbooks("Facture vierge.xls").Sheets("Feuil1").Range("A1:H49").Copy
            Workbooks(W & X & ".xls").Worksheets("Feuil1").Select
            ' Formats de cellule
            Selection.PasteSpecial Paste:=xlPasteFormats
            ' Largeurs de colonne
            Selection.PasteSpecial Paste:=xlPasteColumnWidths
        


        EDIT :

        Apparemment, le pack sécurité de 9 est basé sur F-secure.
        Procédure d'ajout d'exclusion sur F-secure
        0
  18. chtilou Messages postés 1704 Statut Membre 523
     
    Sympa le lien. ;-)
    Par contre pou la copie :-( "indice hors selection"
    0
    1. onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention   120
       
      Tu as bien ajouté ces quatres lignes au dessous de ta ligne
          Workbooks("Facture vierge.xls").Worksheets("Feuil1").Range("A1:H49").Copy _
              Destination:=Workbooks(W & X & ".xls").Worksheets("Feuil1").Range("A1")
      ?

      Sur quelle ligne se produit l'erreur ?
      0
  19. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour tout le monde,

    Je n'ai pas tout lu et je ne sais pas où tu en es dans ta résolution du pb mais procède autrement, c'est plus simple...
    Sauvegarde ton numéro de facture dans un fichier séparé, ça peut être un fichie texte.
    Ouvre ton modèle de facture, ouvre le fichier texte pour récupérer le dernier numéro attribué, calcule le numéro suivant, tu l'enregistres dans le fichier texte et tu le colles dans la cellule.
    Ne faire ça que si la cellule est vide à l'ouverture bien sûr, ensuite tu fais ton save as
    Regarde le fichier que j'avais mis dans la discussion concernée le 09/06 et que l'utilisatrice devait tester... (http://www.commentcamarche.net/forum/affich 6808657 besoin d aide facture sur excel#22.

    Bonne journée tout le monde
    eric
    0
  20. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Chitlou ton problème semble résolu ...

    Si tu as d'autres soucis, n'hésites pas à revenir ..

    bon courage

    ;o)
    0