copie de données dans une feuille

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.
 
J

JyM

Guest
...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
 
D

David

Guest
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
 
J

JyM

Guest
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
 
@

@+Thierry

Guest
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
 
@

@+Thierry

Guest
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
 

Discussions similaires

Statistiques des forums

Discussions
312 469
Messages
2 088 697
Membres
103 924
dernier inscrit
Patrick c