VBA pour sauvegarde nom cellule sur excel

VBA pour sauvegarde nom cellule sur excel - VB/VBA/VBS - Programmation

Marsh Posté le 29-07-2010 à 10:35:13    

Bonjour,  
 
J'aimerais une aide s'il vous plaît je débute sur VBA et j'aimerais pouvoir sauvegarder a partir d'une msbox un fichier quand je le souhaite et les historiser dans un fichier  
Jusqu'a présent mon code est celui ci  
 
Sub sauvegarde()  
 
Message = " Voulez-vous sauvegarder et historiser le reporting?"  
stylebox = vbYesNo + vbInformation  
réponse = MsgBox(Message, stylebox)  
If réponse = vbYes Then  
ActiveWorkbook.SaveAs Filename:="P:\xxxx\Portefeuilles\xxxx\xxxx\" & Range("b1" ).Value & "reporting.xls""" _  
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _  
ReadOnlyRecommended:=False, CreateBackup:=False  
 
 
Else  
 
End If  
 
End Sub  
 
Je pense déja que je n'ai pas renseigner ma feuille pour range("b1" ) la cellul b1 contient simplement une formule de type =aujourdhui().  
 
Je veux qu'en cliquant et bien je puisse obtenir datereportingx.xls dans le fichier cible.  
 
Merci d'avance


Message édité par Elmoricq le 29-07-2010 à 13:52:36
Reply

Marsh Posté le 29-07-2010 à 10:35:13   

Reply

Marsh Posté le 29-07-2010 à 13:02:42    

Hello
 
Déjà, le titre ne se met pas en majuscules. Majuscules sur le net = crier
Donc tu utilises cette petite icone http://forum-images.hardware.fr/themes_static/images_forum/1/edit.gif pour editer ton post et passer le titre en minuscule.
 
 
Ensuite, je dirais que c'est assez simple. Ta date contient (logique) des /
Or, sur Windows on ne peut pas mettre de / dans un nom de fichier.
Passe par un format.
 
Genre :

Code :
  1. If réponse = vbYes Then 
  2. MaDate = Format(Range("b1" ).Value, "yyyy-mm-dd" )
  3. ActiveWorkbook.SaveAs Filename:="P:\xxxx\Portefeuilles\xxxx\xxxx\" & MaDate & "reporting.xls""" _ 
  4. , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _


 
Je mets yyyy-mm-dd comme ca tu auras une date de ce genre : 2010-07-29
Mettre les dates dans ce format, surtout pour des noms de fichiers, c'est bien plus pratique si tu as besoin de trier tes fichiers dans l'explorateur.
 
Si tu as des fichiers comme ceci :
   01-01-2010-reporting.xls     (1er janvier 2010)
   10-01-2010-reporting.xls     (10 janvier 2010)
   01-02-2010-reporting.xls     (1er fevrier 2010)
 
Si tu les tries pas ordre alpha tu auras ceci :
   01-01-2010-reporting.xls     (1er janvier 2010)
   01-02-2010-reporting.xls     (1er fevrier 2010)
   10-01-2010-reporting.xls     (10 janvier 2010)
 
Or le 10/01/2010 devrait etre apres le 01/01/2010, mais par ordre alpha les 01 sont en premier, ce qui est logique.
Avec une date a l'anglaise, plus de souci pour trier.
 
Cordialement


Message édité par SuppotDeSaTante le 29-07-2010 à 13:06:51

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 29-07-2010 à 13:12:33    

Merci pour ce tuyau... mais j'ai tjr un probleme de débogage... visiblement je pense comme j'ai trois feuilles sur excel que je n'ai pas spécifié la page dans laquelle je voulais qu'il cherche b1 non?  
 
Ou rien a voir...

Reply

Marsh Posté le 29-07-2010 à 13:46:01    

Oui tu peux lui preciser par Sheets("Nom de ta feuille" ).Range("B1" ).Value
 
Si tu ne specifies pas, il prend la page active.
 
Et n'oublie pas le titre, sinon la modération risque de passer...
Quoi que sont plus "cool" sur la cat dév


Message édité par SuppotDeSaTante le 29-07-2010 à 13:46:23

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 29-07-2010 à 13:51:36    

BOn visiblement ce n'est pas ça.... dsl mais le débogage me met en jeune la deuxieme partie de de la formule... et point readonlyrecommended:=false... etc
 
Comment puis-je mettre le mon titre en minuscule?
 
c'est la premiere fois que je poste quelque chose

Reply

Marsh Posté le 29-07-2010 à 13:52:59    

Édition du titre : les titres tout en majuscules sont prohibés. Merci de lire les règles de la section.

Reply

Marsh Posté le 29-07-2010 à 13:54:11    

Merci je l'apprends :)

Reply

Marsh Posté le 29-07-2010 à 14:13:03    

ton chemin est bon ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 29-07-2010 à 14:58:32    

Oui il est bon puisque je l'ai fait en macro enregistré et je suis allé le prendre après

Reply

Marsh Posté le 29-07-2010 à 15:23:42    

Aucun souci chez moi :
 

Code :
  1. Sub sauvegarde()
  2. Message = " Voulez-vous sauvegarder et historiser le reporting?"
  3. stylebox = vbYesNo + vbInformation
  4. réponse = MsgBox(Message, stylebox)
  5. If réponse = vbYes Then
  6. MaDate = Format(Range("b1" ).Value, "yyyy-mm-dd" )
  7. ActiveWorkbook.SaveAs Filename:="C:\" & MaDate & "-reporting.xls"
  8. Else
  9. End If
  10. End Sub


 
J'ai bien un fichier sous C: qui se nomme 2010-07-29-reporting.xls


Message édité par SuppotDeSaTante le 29-07-2010 à 15:24:31

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 29-07-2010 à 15:23:42   

Reply

Marsh Posté le 29-07-2010 à 15:37:31    

Ca fonctionne super merci bcp, par contre quand je vais historiser mon fichier... mon fichier conserve la date =aujourd'hui donc evolue alors que j'aimerais qu'il ne change plus de date comme il est historiser...
 
Heureusement que ce genre de forum existe parce que sinon....  
 
Mille mercis

Reply

Marsh Posté le 29-07-2010 à 16:00:39    

Je ne suis pas sur de bien tout comprendre...
 
Mais, si j'ai réussi a traduire dans ma tite tete, ca devrait donner ceci :  :whistle:  

Code :
  1. Sub sauvegarde()
  2. Message = " Voulez-vous sauvegarder et historiser le reporting?"
  3. stylebox = vbYesNo + vbInformation
  4. réponse = MsgBox(Message, stylebox)
  5. If réponse = vbYes Then
  6. MaDate = Format(Range("b1" ).Value, "yyyy-mm-dd" )
  7. Range("b1" ).Value=Date()
  8. ActiveWorkbook.SaveAs Filename:="C:\" & MaDate & "-reporting.xls"
  9. Else
  10. End If
  11. End Sub


Message édité par SuppotDeSaTante le 29-07-2010 à 16:00:50

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 29-07-2010 à 16:04:59    

Ta mécanique intellectuelle fonctionne très bien :)  
 
Dernière chose après je voudrais défintivement te remercier parce que j'ai appris quelques trucs cette aprem lol
 
Comment puis rajouter l'heure à ma date?
 
pour avoir par exemple 2010-05-26 13h30-reporting

Reply

Marsh Posté le 29-07-2010 à 16:14:16    

Toujours en jouant sur les formats.
 
Si tu te positionnes sur Format, et que tu appuies sur F1, tu auras toute l'aide dont tu as besoin.
Je trouve que justement la suite Office, et notament pour vba, a une aide vraiment riche.
 
Pour repondre a ta question, un truc du genre devrait le faire :
MaDate = Format(Range("b1" ).Value, "yyyy-mm-dd" ) & "-" & Format(Time(), "hh""h""mm" )
 
Edit : toujours pareil, les ":" etant interdits dans les noms de fichier, on met un "h" pour palier au souci, puisque Time() renvoi hh:mm:ss


Message édité par SuppotDeSaTante le 29-07-2010 à 16:15:09

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 02-08-2010 à 11:45:53    

Merci pour tt,  
 
Ca m'a bcp aidé,  
 
Si je souhaite copier coller une valeur dans une autre feuille à une date déterminé,  
 
par exemple dans la feuille "reporting2", la cellule "f39"
que je veux mettre dans la feuille "reporting" mais tout les 27 du mois par exemple... dans un tableau et je veux qu'il y ait un pas chaque mois au 27 qu'il continue dans la colonne pour correspondre au mois que je mettrais dans ma colonnne concomitante...
 
Si jamais tu es devant merci de m'aider.. tu es super sympa

Reply

Marsh Posté le 02-08-2010 à 11:48:42    

Oulalalalala va falloir me la refaire en moins cripsé...  :ouch:  
 
J'ai rien compris...  [:transparency]


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 02-08-2010 à 11:55:36    

lol
 
Alors reprenons .... j'aimerais faire un copier coller valeur  d'une cellule tout les 27 du mois dans un tableau:
 
Je veux copier ma cellule "F39" de la feuille "reporting2"
F39 correspond en faite à une performance mensuelle genre -22%
 
dans la cellule "A1" de la feuille "reporting"  ou se trouve un tableau
du type
 
janvier  
fevrier
mars
avril
mai
juin
etc  
 
et je veux que le 29 de chaque mois il reporte la cellule F39 mois apres mois (je crois qu'on appelle ça un pas???)  
 
Evidemment je pense qu'il faut indiquer a la macro qu'il copie ca le 29 du mois.
 
Ai-je été plus clair, je l'espère en tout cas lol
 
 
 
 
 

Reply

Marsh Posté le 02-08-2010 à 12:01:36    

Avec Excel tu ne peux pas automatiser comme ca sur une date.
Si le fichier n'est pas ouvert, Excel ne lance pas de macro, donc niet.
 
Ensuite il faut gerer les exceptions. Si on est le 30, et que le 27 n'a pas été fait parceque week end, congés, pc eteind etc. il faut le prendre en compte.
 
Mais pour ca, je pense qu'un script vbs est plus approprié. Ou, si tu es vraiment sur d'ouvrir ton fichier Excel chaque jour ou presque ca peut se faire.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 02-08-2010 à 12:08:46    

En tout cas il est sur que je l'ouvrirai avant la fin du mois sinon je peux créer un bouton pour qu'il me fasse la manipulation quand je le souhaite et pas a une date figée...
Mais que vais-je mettre derrière le bouton

Reply

Marsh Posté le 04-08-2010 à 10:05:14    

Et bien le code qui dit :
 
- Ouvrir le fichier dans lequel copier la cellule
- Copier la cellule du fichier initial
- Coller la valeur de la cellule dans le fichier final
- fermer le fichier final en le sauvegardant


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 04-08-2010 à 10:26:14    

Oui merci, j'arrive quand même a penser ça :)
 
Pour l'instant j'ai  
 
sheets("feuil2" ).range("h35" ).copy
sheets("feuil3" ).cells(65535, 13).end(xlup) (2). paste special
 
Et si je veux reproduire la même opération mais à l'horizontal dans un tableau ("b15:m16" ) qui représente les mois de l'année
 
janvier fevrier mars avril etc...
 
mais j'aimerais qu'il reviens a janvier quand il a complété décembre...
 

Reply

Marsh Posté le 04-08-2010 à 10:37:41    

Faudrait surtout expliquer point pas point, en explicitant d'ou viennent tes données où doivent elles aller...
Tu parles de feuilles nommées "reporting2" et la dns ton exemple de code tu as "Feuille3"...
 
On a pas le classeur sous les yeux, donc difficile d'extrapoler autant...


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 04-08-2010 à 10:53:56    

Comment charger le fichier? il est deja prêt je peux te l'envoyer par email ou message privé?
 
l'explication avant le fichier :)  
 
 
Chaque fin de mois en cliquant sur un bouton une valeur va s'ajouter M20, M21 DE LA FEUILLE suivi des perf  
 
j'aimerais que ce tableau verticale soit reporter sur mon tableau horizontal en respectant ("b15:m16" ) pour les premieres années  mais si tu sais comment le faire pour qu'il me fasse ca indéfinimement sans s'arreter a decembre 2010 ca serait super.

Reply

Marsh Posté le 04-08-2010 à 11:31:12    

jkm0032 a écrit :

Comment charger le fichier? il est deja prêt je peux te l'envoyer par email ou message privé?
 
l'explication avant le fichier :)  
 
 
Chaque fin de mois en cliquant sur un bouton une valeur va s'ajouter M20, M21 DE LA FEUILLE suivi des perf  
 
j'aimerais que ce tableau verticale soit reporter sur mon tableau horizontal en respectant ("b15:m16" ) pour les premieres années  mais si tu sais comment le faire pour qu'il me fasse ca indéfinimement sans s'arreter a decembre 2010 ca serait super.


 
Ca ne devrait pas etre trop compliqué... J'attends ton mail. Je partagerais les infos et l'avancement ici parcontre.


Message édité par SuppotDeSaTante le 04-08-2010 à 11:31:33

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 04-08-2010 à 11:32:25    

c'est fait sur ton email... merci a toi

Reply

Marsh Posté le 05-08-2010 à 13:01:58    

Désolé, ton mail etait dans mes spams je ne l'avais pas vu...
 

jkm0032 a écrit :

j'aimerais que ce tableau verticale soit reporter sur mon tableau horizontal en respectant ("b15:m16" ) pour les premieres années  mais si tu sais comment le faire pour qu'il me fasse ca indéfinimement sans s'arreter a decembre 2010 ca serait super.


 
Voici le code, normalement j'ai tout bien expliqué en commentaire, mais si tu as besoin de plus d'info n'hesite pas.
J'ai fait un essai de tirer tes colonnes vers le bas, donc jusqu'en 2025, le traitement dure environ 2sc avec mon pc virtuel...
 

Code :
  1. Sub Jkm()
  2. '****************************************************************************************************
  3. 'Définition des parametres si jamais ton fichier change de formen de nom de feuille etc.            *
  4. 'ICI TU PEUX MODIFIER LES VARIABLES POUR LES ADAPTER A TON TABLEAU
  5.     NomFeuilPerf = "Suivi des performances"     'Nom de la feuille qui actuellement _
  6.                                                 se nomme "Suivi des performances"
  7.     ColPerf = "M"   'Colonne ou se situe tes lignes d'evolution _
  8.                     de la feuille "Suivi des performances"
  9.     ColDatePerf = "G"   'Colonne ou se situe les dates des lignes d'evolution _
  10.                         de la feuille "Suivi des performances"
  11.     LignePerf = 9   'Numéro de la ligne où commence le tableau des evolutions _
  12.                     sur la feuille "Suivi des performances"
  13.    
  14.     NomFeuilReport = "Reporting 3"  'Nom de la feuille qui actuellement _
  15.                                     se nomme "Reporting 3"
  16.     LigneReport = 15    'Numéro de la ligne où tu veux coller les valeurs _
  17.                         sur la feuille "Reporting 3"
  18.     ColReport = "A"     '1ere Colonne de ton tableau de la feuille "Reporting 3"
  19. '                                                                                                   *
  20. '****************************************************************************************************
  21. 'On enleve le fait de voir Excel travailler, on gagne en ressource
  22.     Application.ScreenUpdating = False
  23. 'Informations transformées de colonne "A" en numéro donc 1 avec la fonction de dessous xlColumnValue
  24.     ColReportNb = CInt(xlColumnValue(CStr(ColReport)))
  25. 'On regarde la derniere ligne renseignée de la feuille "Suivi des performances", ici de la colonne M
  26.     Sheets(NomFeuilPerf).Select
  27.     Range(ColPerf & "65536" ).Select
  28.     Selection.End(xlUp).Select
  29.     DerLignePerf = ActiveCell.Row
  30.    
  31. 'On se place sur la premiere ligne du tableau
  32.     Range(ColPerf & LignePerf).Select
  33.    
  34. 'On boucle sur le tableau pour aller coller les valeurs dans "Reporting 3"
  35.     LigneReportInc = LigneReport
  36.     For x = LignePerf To DerLignePerf
  37.        
  38.         Sheets(NomFeuilPerf).Select     'on selectionne la feuille "Suivi des performances"
  39.         Annee = Year(Range(ColDatePerf & x).Value)  'on regarde l'année de la ligne
  40.         Mois = Month(Range(ColDatePerf & x).Value)  'on regarde le mois. Le mois va nous permettre, en fonction _
  41.                                                     de la 1ere colonne du tableau de calculer dans quelle _
  42.                                                     colonne le mettre directement
  43.                                                    
  44.         NbLigne = Selection.Rows.Count  'on compte le nb de ligne selectionné(es)
  45.        
  46.         If Annee = Year(Range(ColDatePerf & x + 1).Value) And Range(ColPerf & x + 1).Value <> "" Then   'Si l'année de la _
  47.                                                                                                         ligne en cours _
  48.                                                                                                         est differente de l'annee _
  49.                                                                                                         de la ligne suivante alors :
  50.                                                                                                        
  51.             Selection.Resize(NbLigne + 1).Select    'On selectionne la cellule du dessous en plus
  52.         Else 'sinon
  53.             Sheets(NomFeuilReport).Select   'on selectionne la feuille "Reporting 3"
  54.             Range(ColReport & LigneReportInc).Select   'On selectionne A15 (où en fait A est defini _
  55.                                                     par la variable ColReport et 15 est defini par _
  56.                                                     la variable LigneReport et s'increment a _
  57.                                                     chaque changement de date de "Suivi des performances"
  58.                                                    
  59.             Selection.Value = Annee     'On met l'annee dans cette cellule
  60.             Range(Cells(LigneReportInc, ColReportNb + 1), Cells(LigneReportInc, ColReportNb + 12)).Select     'On selectionne tous les mois _
  61.                                                                                                         donc de B15:M15 _
  62.                                                                                                         (en sachant que _
  63.                                                                                                         le 15 s'incremente tout seul)
  64.                                                                                                        
  65.             Selection.ClearContents     'on efface le contenu
  66.            
  67.             Sheets(NomFeuilPerf).Select     'on selectionne la feuille "Suivi des performances"
  68.             Selection.Copy  'on copy ce qui etait selectionné precedemment, c'est a dire notre plage de valeur pour une année donnée
  69.            
  70.             Sheets(NomFeuilReport).Select   'on revient sur "Reporting 3"
  71.             Cells(LigneReportInc, (Mois - NbLigne) + (ColReportNb + 1)).Select     'on se positionne sur la cellule calculée en _
  72.                                                                                 fonction du 1er mois selectionné dans la plage
  73.             Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True    'on colle avec transposition : _
  74.                                                                             tableau vertical devient horizontal
  75.             Sheets(NomFeuilPerf).Select     'On selection la feuille "Suivi des performances"
  76.             Range(ColPerf & x + 1).Select   'on selectionne la cellule suivant pour repartir a selectionner pour la meme année
  77.             LigneReportInc = LigneReportInc + 1   'on increment notre variable LigneReport pour passer aux lignes suivant la ligne 15
  78.         End If
  79.        
  80.     Next x
  81.    
  82.     Application.CutCopyMode = False     'on enleve le fait que les cellules soient en mode "copier"
  83.    
  84.     'On va mettre en forme la feuille "Reporting 3"
  85.    
  86.     'On regarde la dernier ligne utilisée
  87.     Sheets(NomFeuilReport).Select
  88.     Range(ColReport & "65536" ).Select
  89.     Selection.End(xlUp).Select
  90.     DerLigneReport = ActiveCell.Row
  91.     'Mis en forme de la colonne A
  92.     Range(ColReport & LigneReport).Select
  93.     Selection.Copy
  94.     Range(Cells(LigneReport + 1, ColReportNb), Cells(DerLigneReport, ColReportNb)).Select
  95.     Selection.PasteSpecial Paste:=xlPasteFormats
  96.    
  97.     'Mis een forme de la colonne N qui contient le total
  98.     Cells(LigneReport, ColReportNb + 13).Select
  99.     Selection.Copy
  100.     Range(Cells(LigneReport + 1, ColReportNb + 13), Cells(DerLigneReport, ColReportNb + 13)).Select
  101.     Selection.PasteSpecial Paste:=xlPasteFormulas
  102.     Selection.PasteSpecial Paste:=xlPasteFormats
  103.     Application.CutCopyMode = False     'on enleve le fait que les cellules soient en mode "copier"
  104.    
  105.     'On remet le fait de voir Excel travailler
  106.     Application.ScreenUpdating = True
  107. End Sub
  108. Function xlColumnValue(strColumnIndex As String) As String
  109.     strColumnIndex = UCase(strColumnIndex)
  110.    
  111.     Select Case Asc(strColumnIndex)
  112.         Case 36
  113.             xlColumnValue = xlColumnValue(Mid(strColumnIndex, 2, _
  114.                                       InStr(2, strColumnIndex, "$" ) - 2))
  115.         Case 48
  116.             MsgBox "The number 0 is invalid.", vbExclamation, "Null Denied"
  117.         Case 49 To 57
  118.             If strColumnIndex < 27 Then
  119.                 xlColumnValue = Chr(strColumnIndex + 65 - 1)
  120.             Else
  121.                 If strColumnIndex Mod 26 <> 0 Then
  122.                     xlColumnValue = Chr(strColumnIndex \ 26 + 65 - 1) + _
  123.                                               Chr(strColumnIndex Mod 26 + 65 - 1)
  124.                 Else
  125.                     xlColumnValue = Chr(strColumnIndex \ 26 + 65 - 2) + _
  126.                                               Chr(90)
  127.                End If
  128.             End If
  129.         Case 65 To 90
  130.             xlColumnValue = Asc(strColumnIndex) - 65 + 1
  131.             If Len(strColumnIndex) > 1 Then
  132.                 xlColumnValue = xlColumnValue * 26 + Asc(Right(strColumnIndex, 1)) - 65 + 1
  133.             End If
  134.     End Select
  135. End Function


 
 
En image :
 
http://dje69r.free.fr/jkm1.jpg
http://dje69r.free.fr/jkm2.jpg


Message édité par SuppotDeSaTante le 05-08-2010 à 13:12:56

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-08-2010 à 13:17:11    

Fin des Edit :D


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 08-09-2010 à 14:05:32    

Yo,  
 
Dsl j'ai été viré entre temps :)
 
Donc je viens de voir la réponse merci bcp a toi c'est gentil.  
 

Reply

Marsh Posté le 08-09-2010 à 14:06:42    

Faut vraiment que je me mette serieusement a VBA, j'ouvre un livre que je plonge deux minutes après :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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