Enregistrer sous et cellule existante

Enregistrer sous et cellule existante - VB/VBA/VBS - Programmation

Marsh Posté le 23-03-2006 à 17:45:06    

je souhaite enregistrer la feuille d'un fichier avec la date du jour et le contenu d'une cellule  
exemple 230306 titin
ou titin est le contenu de la cellule i2
j'ai realiser une macro qui fonctionne mais je dois renommer ma fueille enregistrer a chaque fois  
le debut et la fin du code n'est pas interressant pour le sujet mais je ne sais pas ou placer le code a introduiire
mon code actuel est le suivant :
 
Sub Archiver()
'
' Archiver Macro
' Macro enregistrée le 19/02/2006 par Admin
'
 
'
    Sheets("CA" ).Select
    ActiveCell.FormulaR1C1 = "=RC[-1]+1"
    ActiveCell.Offset(1, -1).Range("A1" ).Select
    ActiveCell.FormulaR1C1 = "=R[-1]C[1]"
    ActiveCell.Offset(-1, 1).Range("A1" ).Select
    Selection.Copy
    Sheets("DEVIS" ).Select
    Range("D16:E16" ).Select
    ActiveSheet.Paste
    Range("E15:F15" ).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("CA" ).Select
    ActiveCell.Offset(0, 1).Range("A1" ).Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveCell.Offset(0, 1).Range("A1" ).Select
    Sheets("DEVIS" ).Select
    Range("I2:Q3" ).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("CA" ).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(0, 1).Range("A1" ).Select
    Sheets("DEVIS" ).Select
    ActiveWindow.SmallScroll Down:=24
    Range("Q57" ).Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.SmallScroll Down:=-30
    Sheets("CA" ).Select
    ActiveCell.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(1, -3).Range("A1" ).Select
    Application.CutCopyMode = False
    Selection.EntireRow.Insert
    ActiveCell.Offset(0, -1).Range("A1" ).Select
    ActiveCell.FormulaR1C1 = "=R[-1]C[1]"
    ActiveCell.Offset(1, 0).Range("A1" ).Select
    ActiveCell.FormulaR1C1 = ""
    ActiveCell.Offset(-1, 1).Range("A1" ).Select
    Sheets("DEVIS" ).Select
    Sheets("DEVIS" ).Select
    Sheets("DEVIS" ).Copy
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Documents and Settings\Admin\Mes documents\FCS Global\SUIVI CLIENTS\DEVIS\DEVIS 2006\Classeur2.xls" _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    ActiveWindow.Close
    Range("D16:E16" ).Select
    ActiveCell.FormulaR1C1 = ""
    Range("C17:Q17" ).Select
    ActiveCell.FormulaR1C1 = ""
    Range("B18:Q18" ).Select
    ActiveCell.FormulaR1C1 = ""
    Range("B20:Q20" ).Select
    ActiveCell.FormulaR1C1 = ""
    Range("S2:S3" ).Select
    ActiveCell.FormulaR1C1 = ""
    Range("A21:A56" ).Select
    Selection.ClearContents
    Range("R21:R56" ).Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-12
    Range("G21:H56" ).Select
    Selection.ClearContents
    Range("J21:N56" ).Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-15
    Range("C17:Q17" ).Select
    Sheets("DEVIS" ).Select
    Range("C17:Q17" ).Select
End Sub
 
si quelqu'un se sent l'âme d'un guerrier !!!
 
moi je capitule

Reply

Marsh Posté le 23-03-2006 à 17:45:06   

Reply

Marsh Posté le 23-03-2006 à 19:12:22    

Dans cette ligne :

   ActiveWorkbook.SaveAs Filename:= _
        "C:\Documents and Settings\Admin\Mes documents\FCS Global\SUIVI CLIENTS\DEVIS\DEVIS 2006\Classeur2.xls" _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False


remplace l'arborescence et le nom de fichier par une variable dans laquelle tu auras mis le nom souhaité.
 
Exemple :


Dim Repertoire as String
Dim Fichier as String
Dim Extension as String
 
Repertoire = "C:\Documents and Settings\Admin\Mes documents\FCS Global\SUIVI CLIENTS\DEVIS\DEVIS 2006\
Fichier = "23032006 - " & Cells(9,1).Value
Extension = ".xls"
 
ActiveWorkbook.SaveAs Filename:= _
        Repertoire & Fichier & Extension _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
 


 
Pour la date du jour, tu peux te servir des fonctions Now, Day(), Month() et Year(). Je te laisse les découvrir.
 
P.S. : place ton code entre des balises fixed pour une meilleure clarté ;)


Message édité par juju2k le 23-03-2006 à 19:13:30
Reply

Marsh Posté le 23-03-2006 à 20:38:43    

qu'est ce que les balise fixed
je nage totale, apparement j un probleme de syntaxe
 
ActiveWorkbook.SaveAs Filename:= _
 
    Dim Repertoire As String
    Dim Fichier As String
    Dim Extension As String
    Repertoire = "C:\Documents and Settings\Admin\Mes documents\FCS Global\SUIVI CLIENTS\DEVIS\DEVIS 2006\" &
    Fichier = "jour = format(now, "dd-mm-yy hh mm ss" ) - " & Cells(9, 1).Value &
    Extension = ".xls" _
    , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
    ReadOnlyRecommended:=False, CreateBackup:=False

Reply

Marsh Posté le 23-03-2006 à 21:28:11    

Sur le forum, quand tu écris un message, tu peux mettre certaines infos entre balises. T'as la balise B pour mettre en gras, la balise I pour mettre en italique, etc.
La balise fixe permet de mettre une certaine police d'écriture pour le texte compris dans la balise, de sorte que ce soit plus lisible pour un programmeur (les morceaux de codes qui sont dans des carrés blancs, dans mon message au dessus, sont en fait dans une balise fixe). Les lettres sont plus détaillées on va dire, et surtout, chaque caractère utilise le même espace, pour une meilleure clarté. Désolé si c'est pas très clair...
Parenthèse fermée  :)  
 
Pour ton problème, déjà, je dois corriger un truc, j'me suis gourré : la valeur de la cellule I2 se cherche avec Cells(2,9).Value (et pas Cells(9,1).Value, comme dans mon exemple). Tu rentres d'abord le numéro de ligne (Ligne 2) et ensuite le numéro de colonne (Colonne I = 9è colonne).
 
J'ai l'impression que tu débutes dans la programmation (en VBA du moins).
Alors je vais reprendre ce qu'il faut faire, pas à pas :
 
Tu commences par déclarer ces trois variables :

    Dim Repertoire As String
    Dim Fichier As String
    Dim Extension As String


On mettra dans ces variables une chaîne de caractères (String).
Le but de la manoeuvre est de remplacer le nom de fichier qu'a gardé l'enregistreur de macro par un chemin qui sera différent selon la date du jour et la valeur de I2.
 
Donc dans la variable Repertoire, on y met le chemin du fichier :

Repertoire = "C:\Documents and Settings\Admin\Mes documents\FCS Global\SUIVI CLIENTS\DEVIS\DEVIS 2006\"


 
Ensuite, on met dans une variable l'extension du fichier. C'est un point XLS :

Extension = ".xls"


 
Puis on va créer une chaîne de caractère qui inclu la date du jour, ainsi que le contenu de I2.
La fonction Day() renvoie le jour du mois d'une date donnée.
La fonction Now renvoie la date et l'heure actuelle.
Donc si on demande le jour du mois de Maintenant, ça nous donnera 23.
Pour le mois et l'année, c'est le même principe (avec Month() et Year()). Je développe pas...
 
Cells(2,9).Value récupère la valeur située dans I2.
 
Faisons une chaîne de caractère qui inclu tout ça :

   Fichier = Day(Now) & Month(Now) & Year(Now) & Cells(2, 9).Value


 
Ceci étant dit, attaquons-nous à la méthode SaveAs.
Cette méthode permet d'enregistrer un classeur ou une feuille. Elle demande quelques paramètres facultatifs, tels que le nom de fichier (Filename), le format d'enregistrement (FileFormat), le mot de passe (Password), etc. Dans ton cas, c'est le nom de fichier qui nous intéresse (le reste importe peu, et on pourrait s'en passer). C'est là qu'on va mettre les unes après les autres nos différentes variables :

ActiveWorkbook.SaveAs Filename:= _
        Repertoire & Fichier & Extension _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False


 
À noter que le tiret bas _ nous autorise à changer de ligne alors qu'on est en plein dans une méthode. Ça permet d'aérer le code...
 
J'espère que j'ai été clair. Si t'as des questions, n'hésite pas ;)

Reply

Marsh Posté le 23-03-2006 à 21:29:49    

J'oublais : la cellule que tu veux mettre en nom de fichier ne doit pas comporter les caractères spéciaux qui ne sont pas supportés pour un nom de fichier (genre, le slash /, l'astérisque *, etc.).

Reply

Marsh Posté le 24-03-2006 à 02:13:07    

grand merci pour tes conseils
en effet completement novice mais super interesser par les possibilitées qu'offre excel
 
voila j retapé mon code comme ceci
 
fixe Dim Repertoire As String
    Dim Fichier As String
    Dim Extension As String
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Documents and Settings\Admin\Mes documents\FCS Global\SUIVI CLIENTS\DEVIS\DEVIS 2006\" _
        & Extension = ".xls" _
        & Day(Now) & Month(Now) & Year(Now) & Cells(2, 9).Value _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False fixe
 
 
mais le souci maintenant c'est que le fichier s'enregistre dans le dossier mes documents sans aller jusqu'au chemin indiqué GDevis2006G et le nom du fichier enregisté est tout simplement False
 
pas terrible  
 
et merci encore de ton aide précieuse et détaillé

Reply

Marsh Posté le 24-03-2006 à 02:14:32    

Iencore pas compris la syntaxe des baliises comme tu peus le constaterI

Reply

Marsh Posté le 24-03-2006 à 02:18:08    

par hasard le fait que le texte en I2 soit la reponse a une formule RechercheV n'infuerait pas?? je te rassure celle ci fonctionne...

Reply

Marsh Posté le 24-03-2006 à 10:24:13    

Il ne faut pas remplir une variable à l'intérieur d'une méthode. Donc reprend tous mes codes et en les mettant bout à bout, ça devrait marcher.
 

Dim Repertoire As String
Dim Fichier As String
Dim Extension As String
    Repertoire = "C:\Documents and Settings\Admin\Mes documents\FCS Global\SUIVI CLIENTS\DEVIS\DEVIS 2006\"
    Extension = ".xls"
    Fichier = Day(Now) & Month(Now) & Year(Now) & Cells(2, 9).Value
    ActiveWorkbook.SaveAs Filename:= _
        Repertoire & Fichier & Extension _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False


 
Pour la balise fixed, comme une image vaut mieux qu'un long discours...
 
http://img160.imageshack.us/img160/4906/screenbalisefixed0up.png


Message édité par juju2k le 24-03-2006 à 10:26:55
Reply

Marsh Posté le 24-03-2006 à 10:47:07    

[ok]
c cool  
ca marche impec  
[et pour les balises je pense avoir enfin compris]
je vais essayer quelques modif pour apprendre un peu plus  
Merci encore JuJu2k, Ton aide ma été plus que précieuse

Reply

Marsh Posté le 24-03-2006 à 10:47:07   

Reply

Marsh Posté le 24-03-2006 à 10:49:29    

poolito a écrit :

[ok]
c cool
ca marche impec  
et pour les balises je pense avoir enfin compris
je vais essayer quelques modif pour apprendre un peu plus  
Merci encore JuJu2k, Ton aide ma été plus que précieuse


Reply

Marsh Posté le 24-03-2006 à 11:08:31    

si je pousse le vice un peu plus loin genre  
la ca me donne un enregistremment comme cela :
240306 10 51Tintin
comment faire pour introduire un espace entre les minutes et la cellule I2
 
et eussi comment ajouter encors une autre cellule en bout de nom de fichier
exemple:
240306 10 51 Tintin Milou
 
Mon code actuel ne renvoie pas cette deuxieme cellule ???

Dim Repertoire As String
    Dim Fichier As String
    Dim Extension As String
    Repertoire = "C:\Documents and Settings\Admin\Mes documents\FCS Global\SUIVI CLIENTS\DEVIS\DEVIS 2006\"
    Extension = ".xls"
    Fichier = Format(Now, "dd-mm-yy hh mm" ) & Cells(2, 9).Value & Cells(17, 3).Value
    ActiveWorkbook.SaveAs Filename:= _
        Repertoire & Fichier & Extension _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False

Reply

Marsh Posté le 24-03-2006 à 11:12:19    

scuse en fait l'ajout d'une  autre cellule fonctionne, c compris
Donc je m'interroge juste sur l'introduction d'un espace
 
Merci encore

Reply

Marsh Posté le 24-03-2006 à 11:28:47    

Là, c'est vraiment pas sorcier, et tu devrais trouver en fonction de ce que tu as déjà fait. Je te donne quand même la réponse :

Fichier = Format(Now, "dd-mm-yy hh mm" ) & " " & Cells(2, 9).Value


 
(sinon, juste pour info, on dit une espace, en typographie ;) )

Reply

Sujets relatifs:

Leave a Replay

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