archivage excel

archivage excel - VB/VBA/VBS - Programmation

Marsh Posté le 16-11-2006 à 16:05:02    

Bonjour à tous. Malgré mes nombreuses recherches je dois faire appel à vous.
J'ai 2 classeurs (A et B) Dans le classeur A j'ai deux feuilles (A et B). Comment proceder pour que je puisse envoyer une copie de la feuille A du classeur A dans le classeur B . Puis envoyer une copie de la feuille B dans le classeur B qui maintenant possede 2 feuilles. Le but est d'archiver des données.
Merci beaucoup pour votre aide

Reply

Marsh Posté le 16-11-2006 à 16:05:02   

Reply

Marsh Posté le 16-11-2006 à 17:45:11    

via le macro recorder puis optimisation manuelle du code

Reply

Marsh Posté le 16-11-2006 à 19:12:54    

Merci pour la reponse mais ca ne fonctionne pas. Je vais poser mon probleme autrement. Mon but est que lorsque je fais une facture, qu'une copie de cette facture soit dirigée dans un autre classeur qui agit comme archive. Naturellement cela doit se faire automatiquement.
Voilà. Et il faut que la feuille de cette copie porte le numero de facture pour pouvoir y accéder si besoin.  
Et puis pouvoir procéder ainsi à chaque facture
Bonne fin de journée

Reply

Marsh Posté le 16-11-2006 à 21:11:40    

Bonjour,
"via le macro recorder "" ok j'ai compris ce que tu voulais dire et j'ai presque trouvé la solution. A chercher j'ai réussi à transférer les factures dans le classeur Archive. Il reste juste une chose et je n'ai pas réussi.  
Lorsque le transfert est effectué sur une nouvelle feuille dans Archive, comment faire pour que l'onglet porte le numero inscrit en A1 sur cette feille par exemple
Merci
Michel

Reply

Marsh Posté le 16-11-2006 à 22:20:43    

A tester et adapter


Option Explicit
 
Private Function AjoutFeuille(ByVal Nom As String) As Worksheet
Dim i As Integer
   
    Select Case Len(Nom)
        Case 0: GoTo Erreurs
        Case Is > 31: Nom = Left(Nom, 31)
    End Select
     
    For i = 1 To Len(Nom)
      Select Case Mid(Nom, i, 1)
          Case ":", "/", "\", "?", "*", "[", "]": Mid(Nom, i, 1) = "_"
      End Select
    Next
   
    On Error GoTo Erreurs
    Set AjoutFeuille = ThisWorkbook.Worksheets(Nom)
    Exit Function
   
Erreurs:
    Set AjoutFeuille = ThisWorkbook.Worksheets.Add
    If Len(Nom) > 0 Then AjoutFeuille.Name = Nom
End Function


Message édité par kiki29 le 17-11-2006 à 08:33:52
Reply

Marsh Posté le 16-11-2006 à 22:33:58    

Un gros merci pour ton aide, je l'apprécie beaucoup.  
Je vais le tester et t'en donnerai des nouvelles. Je vais en profiter pour en apprendre plus en étudiant cela en détail.
Encore une fois merci
Michel

Reply

Marsh Posté le 17-11-2006 à 08:20:53    


Option Explicit
 
Sub Tst()
Dim Sh As Worksheet
  AjoutFeuille "01/01/2006"
  AjoutFeuille "Azer:ty/Aze\rty?*[]"
  AjoutFeuille "Coucou"
  AjoutFeuille ""
  AjoutFeuille Sheets("Feuil1" ).Range("A1" )
   
  Set Sh = AjoutFeuille("et une de plus pour la route" )
  Sh.Cells(1, 1) = "et voilà"
End Sub


Message édité par kiki29 le 17-11-2006 à 08:37:58
Reply

Marsh Posté le 17-11-2006 à 17:03:36    

Bonjour.
La premiere formule hélas ne fonctionne pas mais je viens de lire la dernière et je vais tenter. Où j'en sui rendu présentement:
Je génère une facture
Je copie cette facture
Je vais dans mon classeur Archive (copier dans classeur fermé à venir)
J'ajoute une nouvelle feuille (insertion)
Et je colle la copie de la facture
Tout va très bien
Le numéro de fact (ex:23) est en A1.  
Je dois nommer l'onglet "23" et c'est ici que je suis bloqué.
J'ai tenté de plusieurs facons et aussi en utilisant le macro recorder mais rien.
Merci beaucoup de ton aide et bonne journée
Michel
 

Reply

Marsh Posté le 17-11-2006 à 21:22:32    

Bonjour
J'ai trouvé la formule pour renommer tous les onglets et pour un onglet alors adapter. J'ai trouvé ceci au travers de toutes mes recherches. S'il y en a qui veulent en profiter alors voici:
 
Si les noms sont en A1 de chaque feuille:
On Error Resume Next
For Each sht In ActiveWorkbook.Worksheets
Sheets(sht.Name).Name = Sheets(sht.Name).[A1]
Next
 
Bonne fin de journée
Michel

Reply

Marsh Posté le 18-11-2006 à 08:54:42    

Bonjour le forum
Bonjour Kiki, Michel
 
Si je peux me permettre, je trouve que stocker des "feuilles" dans un autre fichier ne me parait pas être la meilleure solution, surtout si tu as plusieurs dizaines de factures => combien de feuilles !!!!! merci la recherche après.
J'avais trouvé une astuce, sur  un autre site, qui donnait la solution suivante : stocker toute une facture en ligne, cad 1 ligne = 1 facture, voir 2 lignes si tu as beaucoup de cellules à conserver, et tout ceci soit dans le même fichier que l'original de la facture ce qui est la meilleure solution, soit bien entendu dans un fichier "archive".
Si cela t'interresse, dépose ton fichier .
 
A+


---------------
Eric
Reply

Marsh Posté le 18-11-2006 à 08:54:42   

Reply

Marsh Posté le 18-11-2006 à 23:41:16    

Bonsoir
Tu propose une piste intéressante. Je vais suivre ton conseil et de toute facon je t'en donnerai des nouvelles. Sinon je déposerai le fichier
Encore une fois merci
Michel

Reply

Marsh Posté le 19-11-2006 à 20:20:31    

Bonjour Erick455 et Kiki29. En fait le programme que je fais pour un ami qui a un commerce.  
 
Si je n'utilise pas un autre classeur pour les archives, alors tu ne crois pas que mon programme (qui est assez imposant) deviendrait surchargé par l'accumulation de toutes ces factures. Le nombre de feuilles serait élevé.  
 
C'est pourquoi j'ai pensé à un autre classeur pour l'archivage. Qu'en penses-tu? Y aurait-il un probleme à ne pas utiliser de classeur externe au niveau de la performance.  
 
Pour les codes j'ai tout essayé mais je ne trouve pas de solution:  
 
Quand je fais une facture, j'envoie une image de cette facture dans un autre classeur "Archives".  
 
Et là le problème: Quand l'image de la facture arrive dans ce classeur, ce classeur créé une nouvelle feuille pour recevoir l'image. Donc je ne peux pas définir le nom à l'avance.  
 
J'ai pratiquement tout tenté et aussi avec le macro recorder.  
Je te donne un exemple  
.--------  
Dim nom as string  
nom=sheets("feuil1" ).range("g2" ).text  ' g2 contenant le no facture  
sheets.add.name=nom  
.-----------  
Cette formule fontionne très bien sauf le ("feuil1" )
 
Mais le nom=sheets("feuil1" ) il faut qu'il devienne: nom=sheets("Mon Numéro de Facture" )  
 
Alors voila et à l'Aide !!!  
Merci beaucoup.


Message édité par michelexcel le 19-11-2006 à 20:27:15
Reply

Marsh Posté le 19-11-2006 à 20:57:52    

La suggestion d'eric455 m'apparait à priori excellente car cela reduirait la taille de l'archivage avec ,suivant le nb de factures,pourquoi pas une feuille annuelle ou mensuelle
D'autre part as-tu esayé qqch de bestial mais qui fonctionne :
ThisWorkbook.Sheets("Feuil1" ).Name = ThisWorkbook.Sheets("Feuil1" ).Range("A1" )
 
Ma proposition via une fonction était plus généraliste et evitait les erreurs possibles
 
Tu comprendras aisement qu'avec le peu de renseignements fournis il soit difficile de savoir ou se situe le(les) erreurs


Message édité par kiki29 le 19-11-2006 à 21:02:23
Reply

Marsh Posté le 19-11-2006 à 21:48:49    

Bonsoir le forum
Bonsoir Kiki, Michel
 
Je ne voudrais surtout pas que Michel soit vexé par mon intervention. D’habitude je ne le fais pas, mais dans le cas présent, ce n’est pas son code qui est critiqué, mais j’apporte une solution que tu n’avais pas envisagée et donc  « demandée ».
 
Dans ton cas avec image : 1 image = 10Ko (~) par feuille, on peut avoir +. Si tu as 100, voir 500 factures, ouille ouille ouille le poids du fichier, et en plus j’ai un doute sur le nombre de feuilles max dans un fichier.
 
Dans mon cas, aucune image, 2 feuilles, et x lignes (x factures) sur la deuxième feuille, d’où  1 fichier pour 65535 factures,  ton ami peut faire des affaires. Et récupération (copie) sur la feuille 1 des anciennes factures….. Cétipabeaussa ? ? ? ? ?  
 
Voilà cqfd
 
Si tu veux, tu peux envoyer ton fichier « feuille facture » pour que l’on puisse concrétiser cela, soit par cjoint.com, ou yousendit.com, car je crois que l’on ne peut pas joindre de fichier sur ce site
 
A+
 
PS : je n’avais pas vu ta réponse Kiki, merci pour « excellente » j’aime bien …lol


---------------
Eric
Reply

Marsh Posté le 20-11-2006 à 16:07:28    

Bonjour eric455 et kiki29.
Merci à vous deux de prendre le temps de répondre. Eric sois rassuré je ne suis nullement vexé de ton intervention. Au contraire je constate l'entraide qui est super ici. Je dois partir au boulot. Je tente ta proposition Kiki ce soir.
 
Avant de quitter,je constate Eric qu'après tes explications je n'ai plus de crainte de tout mettre dans le même classeur.
 
Merci beaucoup à vous deux
Michel

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed