copie de données dans une feuille

  • Initiateur de la discussion Initiateur de la discussion David
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

David

Guest
Bonjour à vous

Voilà mon petit soucis :


J'ai une feuille d'import qui reçoit les données(feuil2) et les dispatche dans dans une autre feuille qui doit au préalable être ajoutée puis nommée avec un format date ("dd-mmm"), donc là, pas de soucis
Là ou ça coince, c'est là :
Voici la situation :

Date de départ :08_juil
Les données à incorporer sont ceux du 07, donc, création de ce jour et insertion des données selon ce qui suit :
sheets("07_juil").select
range("a2"),select
activesheet,paste
Si demain, je lance ma macro, elle ne fonctionnera plus, car il faudrait que les données soient dans la nouvelle feuille créee soit, le 08_juillet ..........,
donc l'extrait de code serait entre autres : sheets("08_juil").select

PS : je fonctionne à jour -1(ce qui serait cool, c'est que je puisse avoir la partie du code qui prendrait en compte les jours ouvrés, si ce n'est pas trop demandé.
Je vous remercie.
 
...tentons...
sauf ton respect,
je ne comprends pas sur quoi tu butes.
Serait-ce de transformer
<<sheets("07_juil")>> en <<sheets("08_juil")>> ?
Est-ce l'indexation des feuilles dans le classeur ?
Veux-tu reprendre ce neuf juillet ET les données du huit selon le flux habituel
(je reçois aujourd'hui les données d'hier)Et celles du sept qu'un accident
t'aurait empêché d'acquérir ou de qualifier ?

JyM
 
Salut Jym,

En fait, je ne veux pas transformer, ce que je veux, c'est éviter ,chaque jour de rentrer dans visual basic et changer le sheets("07_juil") par sheets("08_juil"), puis le lendemain par sheets("09_juil")...........afin que le code continue pour une autre feuille(donc le jour suivant)
Je veux mettre dans le code, celui qui me permettra de renseigner la bonne feuille.(il n'y a aucun accident, c'est juste renseigner des données de la veille
explication :

1) ajout d'une feuille(fastoche)
2)nommer une feuille au format date-1 ou 2 si le jour de la semaine est un samedi ou un dimanche(fastoche)
3)importer des données dans une feuille fixe(fastoche)
4) dispatcher ces données dans la dernière feuille créer qui m'intéresse.
C'est la que je bute.
Il faut que la dernière feuille créer soit active, est -ce là, la solution ?
Je te remercie
 
salut David,

si tu sais nommer la nouelle feuille, tu utilises probablement une variable string "tagada" pour recueillir la date du jour et la passer comme nom à la nouvelle feuille juste aprrès sa création.
genre
>dim tagada as string
>tagada=date (agréméntée de qq astuces de format au besoin)
>worbooks(machin).sheet.add
>activeworkbook.sheets(1).name(tagada) 'donne à la n° feuille avec le nom contenu dans tagada
'gaffe sur le N° selon les versions d'Execel la
'numération des feuilles se comporte différemment
selection copie de la source
>activeworkbook.sheets(ma-source).select
>selection.copy
selection colle sur la destination
>activeworkbook.sheets(tagada).select (ou activate je ne sais plus trop)
>cells(1,1).select 'ou une cellule mieux apropriée
>sheet.paste ou spécialpaste
(à moduler avec l'enregistreur VBA, il fait cela très bien , selon formules, formats,valeurs,transpo ... - je ne retiens jamais les commandes directes d'Excel tellement il est pratique)

j'espère avoir contribué à t'aider.
salut
JyM
 
Bonsoir David, Jym, le Forum

Je ne sais pas si celà pourras t'aider mais si je devais créer une feuille tous les jours pour la dernière journée ouvrée (Vendredi 9 juillet, si on fait tourner ce code jusqu'à Lundi 12 Juillet 23:59) je m'y prendrai ainsi :

Option Explicit

Sub GenerateSheetWeekDay()
Dim TheDay As Date
Dim NumDay As Byte
Dim Question As Byte

TheDay = Date - 1
NumDay = Weekday(TheDay)

Select Case NumDay
Case 1: TheDay = TheDay - 2
Case 7: TheDay = TheDay - 1
End Select

Question = MsgBox("Voulez vous ajouter une feuille pour le dernier jour ouvrable " & _
Format(TheDay, "DDDD DD MMMM YYYY") & " ?", vbYesNo)

If Question = vbYes Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
On Error GoTo Out
Worksheets(Worksheets.Count).Name = Format(TheDay, "DD_MMM")
Exit Sub
Out:
MsgBox "La Feuille pour le " & Format(TheDay, "DD_MMM") & "Existe déjà", vbCritical
End If
End Sub

On noteras ici le mesaage de confirmation ainsi que la gestion d'erreur si la feuille existe déjà...

Maintenant ton problème Davud semble d'être l'inverse, la Feuile 09_Juil exite déjà et tu veux y rajouter des données.... Ma question est simple si la feuille existe déjà dans ce classeur, est-elle créée par une autre Procédure VBA ? (Dans ce cas il serait plus conventionnel de travailler sur le code existant plutôt que de greffer des macros additionnelles de traitements consécutifs... (m'enfin....)

Enfin quoiqu'il en soit, on peut facilement maîtriser ce genre de truc de la même manière mais il faut tout de même gérer l'existence de la feuille et la créer si nécessaire...

Option Explicit

Sub CopyGenerateSheetWeekDay()
Dim WS As Worksheet
Dim TheDay As Date
Dim NumDay As Byte
Dim Question As Byte
Dim OK As Boolean
Dim TheFeuille As String

OK = False

TheDay = Date - 1
NumDay = Weekday(TheDay)

Select Case NumDay
Case 1: TheDay = TheDay - 2
Case 7: TheDay = TheDay - 1
End Select

TheFeuille = Format(TheDay, "DD_MMM")

For Each WS In Worksheets
If WS.Name = TheFeuille Then
OK = True
Exit For
End If
Next

If OK = False Then
Question = MsgBox("La Feuille " & TheFeuille & " n'existe pas une feuille pour le dernier jour ouvrable " & _
Format(TheDay, "DDDD DD MMMM YYYY") & " ?", vbYesNo)

If Question = vbYes Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = TheFeuille
End If
End If

With Sheets(TheFeuille)
.Range("A2") = Worksheets.Item(Worksheets.Count - 1).Range("A2")
End With

End Sub

NB dans ce dernier code, il est subordonné que la feuille de la journée précédente où l'on copie les données de "A2" est la précédente dans l'ordre des onglets...

Bon Dimanche à tous et toutes
@+Thierry
 
En me relisant j'ai zappé la sortie en cas où l'on refuse de générer une nouvelle feuille si elle n'existe pas...

Donc voici le code modifié :
Option Explicit

Sub CopyGenerateSheetWeekDay()
Dim WS As Worksheet
Dim TheDay As Date
Dim NumDay As Byte
Dim Question As Byte
Dim OK As Boolean
Dim TheFeuille As String

OK = False

TheDay = Date - 1
NumDay = Weekday(TheDay)

Select Case NumDay
Case 1: TheDay = TheDay - 2
Case 7: TheDay = TheDay - 1
End Select

TheFeuille = Format(TheDay, "DD_MMM")

For Each WS In Worksheets
If WS.Name = TheFeuille Then
OK = True
Exit For
End If
Next

If OK = False Then
Question = MsgBox("La Feuille " & TheFeuille & " n'existe pas une feuille pour le dernier jour ouvrable " & _
Format(TheDay, "DDDD DD MMMM YYYY") & " ?", vbYesNo)

If Question = vbYes Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = TheFeuille
Else
MsgBox "Traitement interrompu", vbCritical
Exit Sub
End If

End If

With Sheets(TheFeuille)
.Range("A2") = Worksheets(Worksheets.Count - 1).Range("A2")
End With

End Sub

Sorry
Bonne Nuit
@+Thierry
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour