Excel Nom de copie de feuille 1 = contenu de cellules de feuille 1
Tags :
Dernière réponse : dans Programmation
Salut tout le monde.
J'ai besoin d’un petit coup de main.
Je suis professeur et j'aimerais créer un fichier Excel qui contient dans la première page un compte rendu d'intervention vierge.
Le but c'est que les élèves complètent le compte rendu, l'archive, le vide et l'enregistre.
Pour moi l'archivage consistera à faire une copie du compte rendu dans le même classeur et qu'il porte le nom de l'élève et la date du jour qu'il aura complété dans deux cellules du compte rendu.
Voilà le code que j'ai créé pour archiver le compte rendu celui-ci ne marche pas.
Voilà le code que j'ai créé pour effacer le compte rendu
Voilà le code que j'ai créé pour enregistrer le fichier
Pouvez-vous me dire ce qui ne va pas ?
Merci pour votre aide.
J'ai besoin d’un petit coup de main.
Je suis professeur et j'aimerais créer un fichier Excel qui contient dans la première page un compte rendu d'intervention vierge.
Le but c'est que les élèves complètent le compte rendu, l'archive, le vide et l'enregistre.
Pour moi l'archivage consistera à faire une copie du compte rendu dans le même classeur et qu'il porte le nom de l'élève et la date du jour qu'il aura complété dans deux cellules du compte rendu.
Voilà le code que j'ai créé pour archiver le compte rendu celui-ci ne marche pas.
Sheets("Feuil1").Select
Selection.Copy
Sheets.Add
ActiveSheet.Name = Range("A1") & Range("A2")
Voilà le code que j'ai créé pour effacer le compte rendu
Range("A1,A2,E7,G7,G9,E9,E11,G11,G13,E13").Select
Selection.ClearContents
Range("A1").Select
Voilà le code que j'ai créé pour enregistrer le fichier
ActiveWorkbook.Save
Pouvez-vous me dire ce qui ne va pas ?
Merci pour votre aide.
Autres pages sur : excel nom copie feuille contenu cellules feuille
Lassé par la pub ? Créez un compte
Salut tout le forum voilà c'est résolu
L'élève rentre son nom dans A1
Dans A2 la fonction =AUJOURDHUI()
Source : commentcamarche.net
L'élève rentre son nom dans A1
Dans A2 la fonction =AUJOURDHUI()
Sub Archiver()
Dim nomE As String
Dim plage As Range
Dim dj As String
With Sheets("Feuil1")
nomE = .[A1]
Set plage = Union(.[A1], .[A2])
dj = Format(.[A2], "dd-mm-yyyy")
End With
Sheets("Feuil1").Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = nomE & "-" & dj
End Sub
Source : commentcamarche.net
- | Alerter
Merci de ton retour.
-----------
Dis donc, prof, ne sais-tu pas que si un topic s'appelle Quelques règles simples à respecter -- /! A lire avant de poster ! , il peut être judicieux de le lire. Je t'invite donc à le faire, à découvrir qu'ici, on utilise une balise pour présenter son code, ce qui dispense d'avoir à choisir entre le rode foncé, le mauve ou le violet clair
et enfin à modifier tes messages pour respecter cette règle.
-----------
J'aurais des choses à dire sur ce code (que je ne peux pas lire en l'état, bien sûr
)
-----------
Dis donc, prof, ne sais-tu pas que si un topic s'appelle Quelques règles simples à respecter -- /! A lire avant de poster ! , il peut être judicieux de le lire. Je t'invite donc à le faire, à découvrir qu'ici, on utilise une balise pour présenter son code, ce qui dispense d'avoir à choisir entre le rode foncé, le mauve ou le violet clair
et enfin à modifier tes messages pour respecter cette règle.-----------
J'aurais des choses à dire sur ce code (que je ne peux pas lire en l'état, bien sûr
) - | Alerter
zeb a dit :
Merci de ton retour.-----------
Dis donc, prof, ne sais-tu pas que si un topic s'appelle Quelques règles simples à respecter -- /! A lire avant de poster ! , il peut être judicieux de le lire. Je t'invite donc à le faire, à découvrir qu'ici, on utilise une balise pour présenter son code, ce qui dispense d'avoir à choisir entre le rode foncé, le mauve ou le violet clair
et enfin à modifier tes messages pour respecter cette règle.-----------
J'aurais des choses à dire sur ce code (que je ne peux pas lire en l'état, bien sûr
)Voilà c'est fait.
Merci pour ton aide.
- | Alerter
Contenus similaires
- Selection feuille macro excel - Forum
- Excel selection feuille - Forum
- Aide programmation visual basic - Forum
- Excel macro selection ligne - Forum
Quelle aide ?
Pour l'instant, je fais mon agent de la sécurité
---------------------------
Ah, enfin un peu d'aide.
M 'enfin, quelle idée de réunir A1 et A2 pour ne rien en faire ?
Quant à aller mettre une formule Excel dans une cellule pour obtenir la date du jour, tu t'embêtes un max.
Enfin, pour pinailler, si tu as l'intention de programmer un peu plus sérieusement, apprends à indenter ton code.
Il faudrait écrire comme ceci :
Las, le modèle objet du VBA/Excel est incomplet
En bon chemin, les gars de Crosoft se sont arrêté nets !
Voilà ce que je te propose :
C'est tout
Note l'utilisation judicieuse des Worksheets/Sheets qui n'amènent rien (sinon un peu de rigueur).
Pour l'instant, je fais mon agent de la sécurité
---------------------------
Ah, enfin un peu d'aide.
M 'enfin, quelle idée de réunir A1 et A2 pour ne rien en faire ?
Quant à aller mettre une formule Excel dans une cellule pour obtenir la date du jour, tu t'embêtes un max.
Enfin, pour pinailler, si tu as l'intention de programmer un peu plus sérieusement, apprends à indenter ton code.
Il faudrait écrire comme ceci :
Set MaNouvelleFeuille = Worksheets("Feuil1").Copy(After:=Sheets(Sheets.Count))
MaNouvelleFeuille.Name = ...
Las, le modèle objet du VBA/Excel est incomplet
En bon chemin, les gars de Crosoft se sont arrêté nets !
Voilà ce que je te propose :
Worksheets("Feuil1").Copy After:=Sheets(Sheets.Count)
Worksheets(Sheets.Count).Name = Worksheets("Feuil1").Range("A1") & "-" & Format(Now, "dd-mm-yyyy")
C'est tout
Note l'utilisation judicieuse des Worksheets/Sheets qui n'amènent rien (sinon un peu de rigueur).
- | Alerter
Salut zeb et tout le forum.
J'ai modifié mon projet. Voilà où j'en suis :
Je possède :
1 classeurs gabarit qui regroupe tous les documents vides (les comptes-rendus des interventions correctives et préventives)
1 classeur par système se trouvant dans l'atelier. Il y a au départ dans chaque classeur une seule feuille qui doit servir d'index.
Voilà comment cela doit fonctionner :
L'élève ouvre le classeur gabarit, saisit son compte-rendu et clic sur un bouton (contrôle de formulaire).
-Le compte-rendu saisit doit s'archiver dans le classeur du bon système (l'élève indique le nom du système en R4) et être nommé du nom de l'élève (saisit en B4) de la date et de l'heure
-l'index doit se mettre à jour
-le classeur doit être protégé, sauvegarder et fermé
-une fenêtre doit apparaitre pour indiquer que l'archivage c'est bien déroulé.
J'ai fait une macro qui réalise tout ça mais à ma façon
. Et comme j'ai débuté il y a une semaine ça doit pas être terrible.
Je vous soumet mon œuvre pour que vous me disiez tout ce qu'il est possible d'améliorer.
Merci pour votre aide.
J'ai modifié mon projet. Voilà où j'en suis :
Je possède :
1 classeurs gabarit qui regroupe tous les documents vides (les comptes-rendus des interventions correctives et préventives)
1 classeur par système se trouvant dans l'atelier. Il y a au départ dans chaque classeur une seule feuille qui doit servir d'index.
Voilà comment cela doit fonctionner :
L'élève ouvre le classeur gabarit, saisit son compte-rendu et clic sur un bouton (contrôle de formulaire).
-Le compte-rendu saisit doit s'archiver dans le classeur du bon système (l'élève indique le nom du système en R4) et être nommé du nom de l'élève (saisit en B4) de la date et de l'heure
-l'index doit se mettre à jour
-le classeur doit être protégé, sauvegarder et fermé
-une fenêtre doit apparaitre pour indiquer que l'archivage c'est bien déroulé.
J'ai fait une macro qui réalise tout ça mais à ma façon
. Et comme j'ai débuté il y a une semaine ça doit pas être terrible.Je vous soumet mon œuvre pour que vous me disiez tout ce qu'il est possible d'améliorer.
Merci pour votre aide.
Sub Archiver_compte_rendu_correctif()
valeur = Range("R4").Value
Dim wkB As Workbook
'Ouvrir le classeur archive
Set wkB = Workbooks.Open(ThisWorkbook.Path & "\Archives des systèmes\" & valeur & ".xlsm")
'Ôter la protection du classeur archive
ActiveWorkbook.Unprotect Password:="1234"
'Copier le compte-rendu dans le classeur archive et le nommer du nom de l'intervenant, la date et l'heure de saisit
ThisWorkbook.Sheets("Compte-rendu intervention corre").Copy After:=wkB.Sheets(1)
Worksheets(2).Name = Format(Now, "dd.m.yy") & "_" & Format(Now, "hh") & "H" & Worksheets("Compte-rendu intervention corre").Range("AA2") & "min" & Format(Now, "ss") & "_" & Worksheets("Compte-rendu intervention corre").Range("b4")
'Ôter la protection de toutes les feuilles
For Each Feuil In Sheets
Feuil.Unprotect Password:="1234"
Next
'Copier la fonction maintenant() et la coller sous forme de texte
Range("O4").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
'Supprimer les colonnes contenants les instructions
Range("X2").ClearContents
ActiveSheet.Shapes("Button 1").Delete
ActiveSheet.Shapes("Button 2").Delete
' Créer un lien de l'archive vers l'index
Range("W2").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _
SubAddress:=Sheets(1).Name & "!B2", TextToDisplay:=Sheets(1).Name
With Selection.Font
.Size = 16
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
' Créer un lien de l'index vers l'archive
Sheets("index").Select
ActiveSheet.Cells(Rows.Count, "B").End(xlUp)(2).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _
SubAddress:=Sheets(2).Name & "!B2", TextToDisplay:=Sheets(2).Name
With Selection.Font
.Size = 16
End With
Rows("3:3").RowHeight = 27.75
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
'Sauvegarder le classeur archive
ActiveWorkbook.Save
'Fermer le classeur archive
ActiveWindow.Close
'Ouvrir la fenetre compte rendu bien archivé
Load UserForm1
UserForm1.Show
End Sub
- | Alerter
Salut.
Les commentaires dans le code :
Les commentaires dans le code :
valeur = Range("R4" ).Value
Dim wkB As Workbook
'// Déclarer les variables, c'est bien. Fait le pour toutes.
'// Utilise l'option explicit pour être sûr de ne pas en oublier
'Ouvrir le classeur archive
Set wkB = Workbooks.Open(ThisWorkbook.Path & "\Archives des systèmes\" & valeur & ".xlsm" )
'Ôter la protection du classeur archive
ActiveWorkbook.Unprotect Password:="1234"
'// Très bon mot de passe :lol:
'// Ne te fie pas à ce qui est actif ou pas. Ca peut changer.
'// Tu as la variable wkB, utilise-la.
'Copier le compte-rendu dans le classeur archive et le nommer du nom de l'intervenant, la date et l'heure de saisit
ThisWorkbook.Sheets("Compte-rendu intervention corre" ).Copy After:=wkB.Sheets(1)
Worksheets(2).Name = Format(Now, "dd.m.yy" ) & "_" & Format(Now, "hh" ) & "H" & Worksheets("Compte-rendu intervention corre" ).Range("AA2" ) & "min" & Format(Now, "ss" ) & "_" & Worksheets("Compte-rendu intervention corre" ).Range("b4" )
'Ôter la protection de toutes les feuilles
For Each Feuil In Sheets
Feuil.Unprotect Password:="1234"
Next
'Copier la fonction maintenant() et la coller sous forme de texte
Range("O4" ).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
'// Eh, tu es sûr d'être sur la bonne feuille ? Précise-la toujours.
'// M'enfin, pourquoi sélectionner la cellule avant de la copier ?
'// Et utilise Now qu'on te dit. Sauf que dans d'autres cas, ça peut être une bonne idée de fixer la valeur à la place de la formule.
Worksheets("Mafeuille").Range("O4" ).Value = Worksheets("Mafeuille").Range("O4" ).Value
'Supprimer les colonnes contenants les instructions
Range("X2" ).ClearContents
ActiveSheet.Shapes("Button 1" ).Delete
ActiveSheet.Shapes("Button 2" ).Delete
'// Précise la feuille par son nom, son numéro ou par une variable y faisant référence. Toujours.
'// Et ne te fie pas à ce qui est actif ou pas.
' Créer un lien de l'archive vers l'index
Range("W2" ).Select '// <-- M'enfin pourquoi cette sélection ? grrr...
ActiveSheet /* <-- grrr */ .Hyperlinks.Add Anchor:=Selection, Address:="", _
SubAddress:=Sheets(1).Name & "!B2", TextToDisplay:=Sheets(1).Name
With Selection /* <-- grrr */ .Font
.Size = 16
End With
'// Euh.... Range("W2").Font.Size = 16 directement, non ?
With Selection /* <-- grrr */
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
' Créer un lien de l'index vers l'archive
Sheets("index" ).Select /* <-- grrr */
ActiveSheet /* <-- grrr */ .Cells(Rows.Count, "B" ).End(xlUp)(2).Select /* <-- grrr */
ActiveSheet /* <-- grrr */ .Hyperlinks.Add Anchor:=Selection /* <-- grrr */, Address:="", _
SubAddress:=Sheets(2).Name & "!B2", TextToDisplay:=Sheets(2).Name
With Selection.Font
.Size = 16 '//...
End With
Rows("3:3" ) /* <-- ! Rows(3) devrait suffire */ .RowHeight = 27.75
With Selection /* <-- grrr */
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
'Sauvegarder le classeur archive
ActiveWorkbook /* <-- grrr */ .Save
'Fermer le classeur archive
ActiveWindow /* <-- grrr */ .Close
'// Attention, un classeur peut être visible plusieurs fois dans une même session Excel.
'// Dans ce cas, il présente plusieurs fenêtre. Mais il n'est ouvert qu'une fois, bien sûr.
'// Donc pour le fermer, il faut faire un Close sur le classeur lui même, pas sur une de ses fenêtres.
'Ouvrir la fenetre compte rendu bien archivé
Load UserForm1
UserForm1.Show
- | Alerter
zeb Merci pour ton aide désolé de t'avoir fait grogner autant
Voilà où j'en suis j'ai réalisé les modifications que tu m'as conseillés, j’espère correctement.
Option Explicit
Sub Archiver_compte_rendu_correctif()
Dim valeur As String
Dim wkB As Workbook
Dim MaFeuille As Worksheet
'//Petite question : Je n'avais pas déclaré les variables valeur et Mafeuille comment ce fait-il que ça fonctionné ?
valeur = Range("R4").Value
'Ouvrir le classeur archive
Set wkB = Workbooks.Open(ThisWorkbook.Path & "\Archives des systèmes\" & valeur & ".xlsm")
'Ôter la protection du classeur archive
wkB.Unprotect Password:="1234"
'Copier le compte-rendu dans le classeur archive et le nommer du nom de l'intervenant, la date et l'heure de saisit
ThisWorkbook.Sheets("Compte-rendu intervention corre").Copy After:=wkB.Sheets(1)
Worksheets(2).Name = Format(Now, "dd.m.yy_hh\Hn") & "min" & Format(Now, "ss") & "_" & Worksheets("Compte-rendu intervention corre").Range("b4")
'Ôter la protection de toutes les feuilles
For Each MaFeuille In Worksheets
MaFeuille.Unprotect Password:="1234"
Next
'Copier la fonction maintenant() et la coller sous forme de texte
Worksheets(2).Range("O4").Value = Worksheets(2).Range("O4").Value
'//Je colle la fonction maintenant() sous forme de texte pour ne pas que la date change au moment où je vais consulter l'archive
'Supprimer les colonnes contenants les instructions
Worksheets(2).Range("X2").ClearContents
Worksheets(2).Shapes("Button 1").Delete
Worksheets(2).Shapes("Button 2").Delete
'Créer un lien de l'index vers l'archive
Worksheets(1).Cells(Rows.Count, "B").End(xlUp)(2).Hyperlinks.Add Anchor:=Worksheets(1).Cells(Rows.Count, "B").End(xlUp)(2), Address:="", _
SubAddress:=Sheets(2).Name & "!B2", TextToDisplay:=Sheets(2).Name
With Worksheets(1).Cells(Rows.Count, "B").End(xlUp).Font
.Size = 16
End With
With Worksheets(1).Cells(Rows.Count, "B").End(xlUp)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
'Sauvegarder le classeur archive
wkB.Save
'Fermer le classeur archive
wkB.Close
'Ouvrir la fenêtre compte rendu bien archivé
Load UserForm1
UserForm1.Show
End Sub
- | Alerter
Salut,
Le BASIC n'impose pas la déclaration des variables.
Aussi, quand il en rencontre une pour la première fois, il l'a crée avec le type Variant, et c'est tout.
Sauf que les débutants, les étourdis, voire les Zebs qui font cinquante choses en même temps (boulot professionnel, boulot personnel, modération du forum, réponse aux débutants, recherche pour les moins débutants, etc.) ne sont pas à l'abri d'une faute de frappe :
Ajoute l'Option Explicit et tu n'auras pas à chercher l'erreur.
----------------
Quelques pinaillages de ma part :
L'indentation, c'est pas encore ça.
Tu jongles entre deux classeurs. N'écris pas Worksheets sans préciser s'il s'agit de ThisWorkbook ou de wbK.
Utilise les With si tu veux, mais n'en abuse pas :
Euh....
Euh.... Sauf que tu as réalisé 4 fois le même calcul :
Donc il est pertinent d'utiliser une variable !
Voilà
T'es un peu moins débutant, cher professeur
Le BASIC n'impose pas la déclaration des variables.
Aussi, quand il en rencontre une pour la première fois, il l'a crée avec le type Variant, et c'est tout.
Sauf que les débutants, les étourdis, voire les Zebs qui font cinquante choses en même temps (boulot professionnel, boulot personnel, modération du forum, réponse aux débutants, recherche pour les moins débutants, etc.) ne sont pas à l'abri d'une faute de frappe :
Et voilà !
Dim Nom As String
Nom = InputBox("Quel est ton nom ?")
MsgBox "Bonjour, " & Non & "."
Ajoute l'Option Explicit et tu n'auras pas à chercher l'erreur.
----------------
Quelques pinaillages de ma part :
L'indentation, c'est pas encore ça.
Tu jongles entre deux classeurs. N'écris pas Worksheets sans préciser s'il s'agit de ThisWorkbook ou de wbK.
Utilise les With si tu veux, mais n'en abuse pas :
'// Code ridicule
With Worksheets(1).Cells(Rows.Count, "B" ).End(xlUp).Font
.Size = 16
End With
'// Code simplifié
Worksheets(1).Cells(Rows.Count, "B" ).End(xlUp).Font.Size = 16
Très bien, sauf que tu aurais pu écrire :
Worksheets(2).Range("O4" ).Value = Worksheets(2).Range("O4" ).Value
Worksheets(2).Range("O4" ).Value = Now
Euh....
'// Code ridicule
With Worksheets(1).Cells(Rows.Count, "B" ).End(xlUp).Font
.Size = 16
End With
With Worksheets(1).Cells(Rows.Count, "B" ).End(xlUp)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
'// Code simplifié
With Worksheets(1).Cells(Rows.Count, "B" ).End(xlUp)
.Font.Size = 16
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Euh.... Sauf que tu as réalisé 4 fois le même calcul :
Worksheets(1).Cells(Rows.Count, "B" ).End(xlUp)
Donc il est pertinent d'utiliser une variable !
Dim x As Range
....
Set x = wb.Worksheets(1).Cells(Rows.Count, "B" ).End(xlUp)
x(2, 1).Hyperlinks.Add Anchor:=x(2, 1), Address:="", SubAddress:=wb.Worksheets(2).Name & "!B2", TextToDisplay:=wb.Worksheets(2).Name
x.Font.Size = 16
x.HorizontalAlignment = xlCenter
x.VerticalAlignment = xlCenter
Voilà
T'es un peu moins débutant, cher professeur
- | Alerter
Eh bien merci beaucoup zeb pour ton aide et toutes tes explications.
Voilà ma macro terminée.
Voilà ma macro terminée.
Option Explicit
Sub Archiver_compte_rendu_correctif()
Dim valeur As String
Dim wkB As Workbook
Dim MaFeuille As Worksheet
Dim x As Range
valeur = Range("R4").Value
'// Ouvrir le classeur archive
Set wkB = Workbooks.Open(ThisWorkbook.Path & "\Archives des systèmes\" & valeur & ".xlsm")
Set x = wkB.Worksheets(1).Cells(Rows.Count, "B").End(xlUp)
'// Ôter la protection du classeur archive
wkB.Unprotect Password:="1234"
'// Copier le compte-rendu dans le classeur archive et le nommer du nom de l'intervenant, la date et l'heure de saisit
ThisWorkbook.Sheets("Compte-rendu intervention corre").Copy After:=wkB.Sheets(1)
wkB.Sheets(2).Name = Format(Now, "dd.m.yy_hh\Hn") & "min" & Format(Now, "ss") & "_" & ThisWorkbook.Sheets("Compte-rendu intervention corre").Range("b4")
'// Ôter la protection de toutes les feuilles
For Each MaFeuille In Worksheets
MaFeuille.Unprotect Password:="1234"
Next
'// Copier la fonction maintenant() et la coller sous forme de texte
wkB.Sheets(2).Range("O4").Value = Now
'// Supprimer les colonnes contenants les instructions
wkB.Sheets(2).Range("X2").ClearContents
wkB.Sheets(2).Shapes("Button 1").Delete
wkB.Sheets(2).Shapes("Button 2").Delete
'// Créer un lien de l'index vers l'archive
x(2, 1).Hyperlinks.Add Anchor:=x(2, 1), Address:="", SubAddress:=wkB.Worksheets(2).Name & "!B2", TextToDisplay:=wkB.Worksheets(2).Name
x(2, 1).HorizontalAlignment = xlCenter
x(2, 1).VerticalAlignment = xlCenter
x(2, 1).Font.Size = 16
'// Sauvegarder le classeur archive
wkB.Save
'// Fermer le classeur archive
wkB.Close
'// Ouvrir la fenetre compte rendu bien archivé
Load UserForm1
UserForm1.Show
End Sub
- | Alerter
Lassé par la pub ? Créez un compte