[VBA_Excel] Copier feuille classeur A vers B
Résoluchtilou Messages postés 1704 Statut Membre -
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
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.
-
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. ;-) -
Personne?
Finalement ça me rassure un peu.
Donc c'est pas si simple. -
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 -
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. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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) -
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 ?
-
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?- 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. :-(
-
-
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à -
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... -
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) -
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. ;-) -
https://www.cjoint.com/?gqpnVbP2fg
Fais gaffe j'ai changé les chemins des rep et fichiers ... je suis pas sûr d'avoir remis les bons partout
-
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". -
tu as quel version d'Excel ?
Ensuite il faut mettre le niveau sécurité mini, sinon les macors beug -
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. -
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 ...
-
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)-
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...- 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é ?
-
-
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é.-
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 ?
- 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. - 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
-
-
Sympa le lien. ;-)
Par contre pou la copie :-( "indice hors selection" -
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 -
Bonjour,
Chitlou ton problème semble résolu ...
Si tu as d'autres soucis, n'hésites pas à revenir ..
bon courage
;o)