IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

petit test sur dates alimentées par variable tableau


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut petit test sur dates alimentées par variable tableau
    Bonjour ou rebonjour à tou(te)s,

    je viens de faire un petit test et ne m'explique pas le résultat

    1 colonne (A) avec des cellules formatées au format date (ex : 01/01/2012)

    j'execute ce code simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub aa()
    Dim tbl(1 To 10), x As Integer
    tbl(1) = Date
    MsgBox tbl(1)
    For x = 2 To 10
    tbl(x) = Date + x
    Next
     
    Range("a2:a11") = Application.WorksheetFunction.Transpose(tbl)
    End Sub
    et je regarde le résultat : seule la cellule "A2" se retrouve au format anglais, soit ; 02/11/2012 au lieu de 11/02/2012

    Merci d'avance à ceux qui connaissent la solution et daigneront me répondre

    bonne journée

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub AA()
    Const N As Integer = 123
    Dim Tbl(1 To N, 1 To 2) As Date
    Dim x As Integer
     
    For x = 1 To N
        Tbl(x, 1) = Date + x - 1 'Ou DateAdd("d", x - 1, Date)
    Next x
     
    With Worksheets("Feuil1").Range("A2").Resize(N, 1)
        .NumberFormat = "dd/mm/yyyy"
        .Value = Tbl
    End With
    End Sub

  3. #3
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Je te remercie mercatog, ton code fonctionne mais je ne comprends toujours pourquoi avec le mien j'ai ce résultat ayant mis le format date avant

    Bonne journée

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu as déclaré ton tableau comme variant.
    Regarde si tu déclare ton tableau Tbl As Long en formatant au préalable ta colonne en date.

    Ici 4 codes avec modification des déclarations de Tbl et utilisation ou non du Transpose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Sub AA()
    Dim Tbl(1 To 10, 1 To 2) As Date ' ou as variant
    Dim x As Integer
     
    For x = 1 To 10
        Tbl(x, 1) = Date + x - 1
    Next
     
    With Range("A2:A11")
        .NumberFormat = "dd/mm/yyyy"
        .Value = Tbl
    End With
    End Sub
     
    Sub BB()
    Dim Tbl(1 To 10, 1 To 2) As Long
    Dim x As Integer
     
    For x = 1 To 10
        Tbl(x, 1) = Date + x - 1
    Next
     
    With Range("B2:B11")
        .NumberFormat = "dd/mm/yyyy"
        .Value = Tbl
    End With
    End Sub
     
    Sub CC()
    Dim Tbl(1 To 10) As Date ' ou as variant
    Dim x As Integer
     
    For x = 1 To 10
        Tbl(x) = Date + x - 1
    Next
     
    With Range("C2:C11")
        .NumberFormat = "dd/mm/yyyy"
        .Value = Application.Transpose(Tbl)
    End With
    End Sub
     
    Sub DD()
    Dim Tbl(1 To 10) As Long
    Dim x As Integer
     
    For x = 1 To 10
        Tbl(x) = Date + x - 1
    Next
     
    With Range("D2:D11")
        .NumberFormat = "dd/mm/yyyy"
        .Value = Application.Transpose(Tbl)
    End With
    End Sub

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Merci encore de ta sollicitude, j'ai encore quelques problèmes avec certaines déclarations de variables, comme avec mon dernier casse-tete avec lequel il a fallu que je fasse fumer le peu de neurones qu'il me reste, j'avais le problème ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    chDate = Date
      For x = 0 To WorksheetFunction.CountIf(plage, ">=" & chDate)
    ...
    impossible d'avoir le résultat escompté tant que je n'avais pas déclaré ma variable "chdate" as Double et non as Date

    Bonne soirée

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Date, type de données

    Voir aussi Exemple Particularités
    Les variables de type Date sont stockées sous la forme de nombres à virgule flottante de 64 bits (8 octets) IEEE représentant des dates comprises entre le 1er janvier 100 et le 31 décembre 9999, et des heures allant de 0:00:00 à 23:59:59. Toute valeur de littéral date peut être attribuée à une variable de type Date. Les littéraux date doivent être délimités par le signe #, par exemple #January 1, 1993# ou #1 Jan 93#.
    Les variables de type Date affichent les dates au format de date abrégé reconnu par votre ordinateur. Les heures s'affichent au format horaire (plage de 12 ou 24 heures) défini dans votre ordinateur.
    Lorsque d'autres types de données numériques sont convertis en données de type Date, les valeurs situées à gauche du séparateur décimal représentent la date, tandis que celles situées à droite correspondent à l'heure. Minuit est représenté par 0 et midi par 0,5. Les nombres entiers négatifs représentent des dates antérieures au 30 décembre 1899.
    L’interprétation des dates diffère entre vba (américaine) et Excel (française)

    Tant que tu travailles seulement en vba, tu n'auras pas de conflit d'interprétation. Idem si tu travailles seulement sur Excel.

    Les problèmes interviennent dès lors qu'il y a "mélange" des interprétations Excel/ Vba.

    Ceci est constaté dans ton sujet initial par rapport aux 4 exemples que je t'avais proposé et notamment lors de l'utilisation de Worksheetfunction.Transpose

    Worksheetfunction
    Cet objet est utilisé comme conteneur des fonctions de feuille de calcul Microsoft Excel que vous pouvez appeler à partir de Visual Basic pour Applications.
    C'est à dire permettre à vba d'utiliser les fonctions d'Excel. D'où le problème d'interprétation différent des dates.

    La solution est de déclarer les dates en Long (si tu ne veux pas d'heures). Ces dates seront interprétés de la même façon entre Excel et Vba

    C'est mon explication grosso modo du problème que tu as rencontré.

  7. #7
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Citation Envoyé par casefayere Voir le message
    Bonjour ou rebonjour à tou(te)s,

    je viens de faire un petit test et ne m'explique pas le résultat
    1 colonne (A) avec des cellules formatées au format date (ex : 01/01/2012) .../...
    et je regarde le résultat : seule la cellule "A2" se retrouve au format anglais, soit ; 02/11/2012 au lieu de 11/02/2012
    Un peu de lecture....

    Comprendre et gérer les dates sous Excel et en VBA

    cordialement,

    Didier

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/06/2015, 16h11
  2. Petit test sur les listes
    Par Erwane dans le forum Scheme
    Réponses: 6
    Dernier message: 19/02/2008, 23h55
  3. [JFileChooser] Une petite question sur les chemins par defaut
    Par MDP dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/02/2008, 14h49
  4. Test sur date + heure
    Par zoidy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/08/2007, 11h15
  5. [Tableaux] Test sur les valeurs d'un tableau
    Par roux-JO dans le forum Langage
    Réponses: 3
    Dernier message: 08/07/2007, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo