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 :

Barre de formule et format d'une date


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut Barre de formule et format d'une date
    Bonjour,

    Je ne comprends un phénomène particulier !

    Je saisis une date dans une cellule exemple:30/10/2013

    Si je personnalise le format via la console "Format de cellule" en choisissant "personnalisé" et "dd", la cellule affiche "30" et dans la barre de formule il y a "30/10/1973"

    Par contre, si je provoque dynamiquement via vba le remplissage de la cellule en lui appliquant le meme type de format, la cellule affiche certes "30" mais la barre de formule indique "30" et non plus "30/10/1973"
    Et je souhaite ce dernier cas de figure !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    'c est un numéro de colonne et d une date quelconque 
    Public Sub RemplirDateNum(c As Integer, d As Date)
        For i = 1 To Day(DateSerial(Year(d), Month(d) + 1, 1) - 1)
            Dim dateserie As Date
            dateserie = DateSerial(Year(d), Month(d), i)
            With ActiveSheet.Cells(i + 6, c)
                .Value = Format(dateserie, "dd")
     
            End With
        Next i
    End Sub
    Pouvez vous m'aider, svp?

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Par défaut
    Oui c'est normal, dans le premier cas tu as une date dans ta cellule et tu demandes via la console "Format de cellule" un format spécifique. Ainsi ta date s'affiche dans la cellule avec le format que tu as choisi (ce n'est que l'affichage) mais la valeur de la cellule reste la date complête (que tu visualises dans la barre de formule).

    Dans le deuxième cas tu modifies la valeur de ta cellule et non pas le format de la cellule.

    Le format (l'affichage) et la valeur de la cellule sont deux choses différentes.

  3. #3
    Expert confirmé
    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
    Par défaut
    Bonjour,

    Par contre, si je provoque dynamiquement via vba le remplissage de la cellule en lui appliquant le meme type de format, la cellule affiche certes "30" mais la barre de formule indique "30" et non plus "30/10/1973"
    Ça n’a rien à voir, la fonction Format renvoie un variant qui est un string comme l’indique l’aide VBA et comme on peut le constater dans la fenêtre Variables locales de l’éditeur VBE.
    Donc lors de ta provocation dynamique, tu attribues à la propriété Value non pas une date, mais une chaîne de caractère qui, vu qu’elle représente un nombre à 1 ou 2 digits, n’a aucune chance d’être interprétée comme une date par Excel ! Le 30 obtenu n'est donc pas un format de date, mais un bête nombre tout simple.
    Ceci t’es invisible car tu n’attribues pas la valeur écrite à une variable déclarée, mais tu l’injectes directement dans la cellule, ce qui est sans souci, mais ne te permet pas d’analyser le phénomène.

    Si on joue à l’apprenti sorcier pour voir ce qui se passe, ça devient plus complexe car on est dans les jeux subtils du fonctionnement particulier d’Excel.

    Si tu testes le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub JouerAvecLeFeu()
    Dim Mavar As Variant
    Dim Mavar2 As Date
     
    Mavar = Format("30/05/2013", "dd")
    Mavar2 = Format("30/05/2013", "dd")
     
    ActiveSheet.Cells(2, 2).Value = Mavar
    ActiveSheet.Cells(3, 2).Value = Mavar 'Cellule en format standard / Feuille
    ActiveSheet.Cells(4, 2).Value = Mavar 'Cellule en format date / Feuille
    End Sub
    Tu obtiens en pas à pas dans la fenêtre variable locale :
    Nom : Ormonth Data-1.jpg
Affichages : 512
Taille : 11,0 Ko


    Et en feuille tu auras :

    Nom : Ormonth Data-2.jpg
Affichages : 460
Taille : 10,7 Ko

    Donc en forçant MaVar en date par déclaration, tu as en VBA le 29 janvier 1900 et un 30 dans la cellule B3 ou un 30/01/1900 en B4.

    Explications :


    En forçant MaVAr2 en Date en VBA, le VBA transforme le String « 30 » en date, donc pour lui, il interprète le N° de série 30 soit le 30ème jour à partir du point de départ de son calendrier qui est le 31 dec 1899, soit le 29 janvier 1900, ce qu’on obtient dans la fenêtre variables locales.
    Si on injecte le string obtenu (30 donc) dans une cellule en format standard, il l’interprète comme un nombre et inscrit 30.
    Si par contre, on injecte le string obtenu (30 donc) dans une cellule en format Date, il convertit le nombre apparent en date, donc le 30ème jour à partir du point de départ de son calendrier qui est le 1er janvier 1900 dans Excel Feuille, soir le 30 janvier 1900. Eh oui, les origines des calendriers VBA et Feuilles ne sont pas les même, voir le tuto :

    Comprendre et gérer les datessous Excel et en VBA

    Comme quoi rien n’est anodin…

    Sinon mettre une déclaration de variable dans une boucle ce n’est pas trop indiqué…

    cordialement,

    Didier

Discussions similaires

  1. [Dates] changer le format d'une date.
    Par maraly dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2007, 16h17
  2. [VB.net] Verifier le format d'une Date
    Par Seth77 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/11/2006, 13h21
  3. Encore un problème sur le format d'une date!
    Par bygui dans le forum Langage
    Réponses: 1
    Dernier message: 26/06/2006, 08h41
  4. commant changer le format d'une date?
    Par tribaleur dans le forum ASP
    Réponses: 5
    Dernier message: 02/06/2006, 07h55
  5. [C#] Serveur anglais : format d'une date
    Par FoxDeltaSierra dans le forum ASP.NET
    Réponses: 5
    Dernier message: 18/01/2006, 16h21

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