Enregistrer sous et cellule existante - VB/VBA/VBS - Programmation
Marsh Posté le 23-03-2006 à 19:12:22
Dans cette ligne :
ActiveWorkbook.SaveAs Filename:= _ |
remplace l'arborescence et le nom de fichier par une variable dans laquelle tu auras mis le nom souhaité.
Exemple :
|
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é
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
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 |
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:= _ |
À 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
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.).
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é
Marsh Posté le 24-03-2006 à 02:14:32
Iencore pas compris la syntaxe des baliises comme tu peus le constaterI
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...
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 |
Pour la balise fixed, comme une image vaut mieux qu'un long discours...
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
Marsh Posté le 24-03-2006 à 10:49:29
poolito a écrit : [ok] |
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 |
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
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 )
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