Créer une feuille Excel de Temps de VBA

Bonjour à tous,

Je suis en Master 2 système d'informations et contrôle de gestion et j'ai un projet de génie logiciel à réaliser.

Dans ce projet nous devons réaliser des traitements en VBA. Je viens vers vous car j'ai une difficulté.

Mon objectif est de créer une table des temps qui sera ensuite insérée dans un système de base de données de type Access ou encore SQL-SERVER.

Je voudrais que ma table est la structure suivante:

day_id / day_date / dayofweek_id / month_id / year_id / Dayofweek_name / month_name

731 / 01/01/2004/ 1 / 1 / 2004 / Jeudi / Janvier

732 / 02/01/2004 / 2 / 1 / 2004 / vendredi / Janvier

Ma question, comment réaliser le script de la colonnes "day_date"? Je voudrai allez de la day_id 732 a 1506.

Merci de votre aide, j’espère que ma demande est claire pour vous.

Armand

Bonjour,

regarde peut être ceci, espérant que cela puisse t'aider à avancer, les lignes 1 et 2 étant déjà renseignées...

Option Explicit
Sub test()
Dim i As Integer, j As Integer
Application.ScreenUpdating = False
j = 3
For i = 732 To 1506
    Cells(j, 1) = i
    Cells(j, 2) = Cells(j - 1, 2) + 1
    j = j + 1
Next i
Application.ScreenUpdating = True
End Sub

bonne fin d'après midi

@+

Merci pour ta réponse mais je souhaite créer ma table a partir de rien. Je souhaite qu'elle se forme avec des codes VBA.

En bidouillant, j'ai réalisé ça :

Sub day_date()

    Sheets("DATE").Select

' test day_date

    Range("B2").Select
    ActiveCell.FormulaR1C1 = "1/1/2004"
    Selection.AutoFill Destination:=Range("B2:B776"), Type:=xlFillDefault

End Sub

Mais je trouve pas ça trop sexy :/

Bonjour,

une autre solution :

Option Explicit
Sub day_date()
With Sheets("DATE")
    .Range("B2").Value = "1/1/2004"
    With .Range("B3:B776")
        .FormulaR1C1 = "=R[-1]C+1"
        .Value = .Value
    End With
End With
End Sub

bonne journée

@+

Voila ce que j'ai codé. Qu'est ce que tu en penses ? Le fichier est en pièce jointe.

' DECLARATION OBLIGATOIRE DES VARIABLES (RECOMMANDE)
' AUTEUR : BERAUD Armand
'

Option Explicit                                            ' Déclaration obligatoire des variables

Sub Date_TABLE()

    Sheets("DATE").Select
    Dim COMPTEUR_day_date_fin As Date
    Dim COMPTEUR_day_date As Date
    Dim COMPTEUR_day_id As Integer

' Suppression Macro
    Range("A1").Select                                     ' Sélection cellule A1
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents

        With Selection.Font                                ' Format du tableau
        .Name = "Calibri"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With

   ' Création de l'en-tête

    Range("A1").Select                                      ' Sélection cellule A1

    ActiveCell.Value = "day_id"                             ' Stockage libellé day_id en cellule active
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = "day_date"                           ' Stockage libellé day_date en cellule active
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = "dayofweek_id"                       ' Stockage valeur dayofweek_id en cellule active
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = "month_id"                           ' Stockage libellé month_id en cellule active
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = "year_id"                            ' Stockage libellé year_id en cellule active
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = "dayofweek_number"                   ' Stockage libellé dayofweek_number en cellule active
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = "dayofweek_name"                     ' Stockage libellé dayofweek_name en cellule active
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = "month_name"                         ' Stockage libellé month_name en cellule active
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = "quater"                             ' Stockage libellé Quater en cellule active
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = "full_date"                          ' Stockage libellé Full_date en cellule active

    Range("A2").Select                                      ' Sélection cellule A2

 MsgBox "Column Heading realized"

 ' Création du corps de la table

 COMPTEUR_day_date_fin = Application.InputBox(Prompt:="Saisir une date de fin postérieur au 01/01/2004 sous la forme JJ/MM/AAAA", Type:=2)

 COMPTEUR_day_id = "732"                                    ' Initialisation du COMPTEUR_day_id, 1er clé de la table Time_base du fichier access
 COMPTEUR_day_date = "1/1/2004"                             ' Initialisation du COMPTEUR_day_date,date qui correspond
                                                            ' à la première clé de la table Time_base du fichier access

 Do While COMPTEUR_day_date <= COMPTEUR_day_date_fin

    ActiveCell.Value = COMPTEUR_day_id                      ' Stockage de la valeur de COMPTEUR_day_id dans la 1er colonne
    COMPTEUR_day_id = COMPTEUR_day_id + 1                   ' Incrémentation du compteur "COMPTEUR_day_id"
    ActiveCell.Offset(0, 1).Select                          ' Décalage d'une cellule vers la droite

    ActiveCell.Value = COMPTEUR_day_date                    ' Stockage de la valeur de COMPTEUR_day_date dans la 2ième colonne
    COMPTEUR_day_date = COMPTEUR_day_date + 1               ' Incrémentation du compteur "COMPTEUR_day_date"
    ActiveCell.Offset(0, 1).Select                          ' Décalage d'une cellule vers la droite

    ActiveCell.FormulaR1C1 = "=DAY(RC[-1])"                 ' Stockage du numéro du jour avec la fonction "=DAY()"
    ActiveCell.Offset(0, 1).Select

    ActiveCell.FormulaR1C1 = "=MONTH(RC[-2])"               ' Stockage du numéro du mois avec la fonction "=MONTH()"
    ActiveCell.Offset(0, 1).Select

    ActiveCell.FormulaR1C1 = "=YEAR(RC[-3])"                ' Stockage du numéro de l'année avec la fonction "=YEAR()"
    ActiveCell.Offset(0, 1).Select

    ActiveCell.FormulaR1C1 = "=WEEKDAY(RC[-4],14)"          ' Stockage du numéro du jour de la semaine avec la fonction "=WEEKDAY()" ; 14 pour commencer  à compter à partir du Jeudi
    ActiveCell.Offset(0, 1).Select

    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-1]=1,""Thursday"",IF(RC[-1]=2,""Friday"",IF(RC[-1]=3,""Saturday"",IF(RC[-1]=4,""Sunday"",IF(RC[-1]=5,""Monday"",IF(RC[-1]=6,""Tuesday"",IF(RC[-1]=7,""Wednesday"")))))))"
    ActiveCell.Offset(0, 1).Select

    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-4]=1,""January"",IF(RC[-4]=2,""February"",IF(RC[-4]=3,""March"",IF(RC[-4]=4,""April"",IF(RC[-4]=5,""May"",IF(RC[-4]=6,""June"",IF(RC[-4]=7,""July"",IF(RC[-4]=8,""August"",IF(RC[-4]=9,""September"",IF(RC[-4]=10,""October"",IF(RC[-4]=11,""November"",IF(RC[-4]=12,""December""))))))))))))"
    ActiveCell.Offset(0, 1).Select

    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-5]<=6,""Q1"",IF(RC[-5]>6,""Q2""))"         ' Stockage du numéro du semestre en fonction de la valeur du mois
    ActiveCell.Offset(0, 1).Select

    ActiveCell.FormulaR1C1 = _
        "=CONCATENATE(RC[-3],"" "",RC[-7],"" "",RC[-2],"" "",RC[-5])"   ' Stockage du numéro du semestre en fonction de la valeur du mois
    ActiveCell.Offset(1, -9).Select                                     ' Décalage 1 ligne vers le bas et 9 colonnes vers la gauche
 Loop

 MsgBox "Successful"

 End Sub

Bonjour,

A priori pas de fichier en pièce jointe, petite remarque rarement utilse les "select" et autres "activate" en vba, ne font que ralentir le code...

bon après midi

@+

Re,

une proposition, pas tout traiter, A voir...

Option Explicit
Sub test()
Dim COMPTEUR_day_date_fin As Date, d As Date, COMPTEUR_day_id As Long, l As Long

Application.ScreenUpdating = False

Range("A1:J1").Value = Array("day_id", "day_date", "dayofweek_id", "month_id", "year_id", _
    "dayofweek_number", "dayofweek_name", "month_name", "quater", "full_date")

COMPTEUR_day_date_fin = Application.InputBox(Prompt:="Saisir une date de fin postérieur au 01/01/2004 sous la forme JJ/MM/AAAA", Type:=2)

If Not IsDate(COMPTEUR_day_date_fin) Then Exit Sub

COMPTEUR_day_id = 732: l = 2

For d = #1/1/2004# To COMPTEUR_day_date_fin
    Cells(l, 1) = COMPTEUR_day_id
    Cells(l, 2) = d
    Cells(l, 3) = Day(d)
    Cells(l, 4) = Month(d)
    Cells(l, 5) = Year(d)
    Cells(l, 6) = Weekday(d, vbMonday)
    Cells(l, 7) = WeekdayName(Weekday(d, vbMonday))
    Cells(l, 8) = MonthName(Month(d))
    Cells(l, 9) = IIf(Month(d) > 6, "Q2", "Q1")

    COMPTEUR_day_id = COMPTEUR_day_id + 1: l = l + 1
Next d

Application.ScreenUpdating = True

End Sub

C'est vraiment pas mal! c'est plus clair et le traitement va beaucoup plus vite.

Je pense que je vais prendre ta version pour faire une version plus algorithmique et la mienne sera une version en utilisant l'outils d'enregistrement d'excel.

petite question: à quoi sert : Application.ScreenUpdating = False et Application.ScreenUpdating = True ??

et comment concaténer les données des cellules pour faire la colonne "full_date"? en gardant le même esprit que ton traitement?

Merci pour tous

Armand

Bonjour,

petite question: à quoi sert : Application.ScreenUpdating = False et Application.ScreenUpdating = True ??

cette instruction bloque la mise à jour de l'écran et la rétablit à la fin, permet de gagner sur la vitesse d'éxécution...

pour la concaténation, rajoute cette ligne, juste avant la valorisation des variables, à compléter....

    Cells(l, 10) = Cells(l, 1) & " " & Cells(l, 2).Text & " " & Cells(l, 3) & " "     'etc...
    COMPTEUR_day_id = COMPTEUR_day_id + 1: l = l + 1
Next d

bonne journée

@+

Rechercher des sujets similaires à "creer feuille temps vba"