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 :

Problème avec Dateserial


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec Dateserial
    Bonjour,

    J'ai téléchargé un fichier Excel 2003, il y a bien longtemps (j'ai également Excel 2003).
    Ce fichier permet d'obtenir un calendrier qui se met à jour suivant l'année choisie avec les jours fériés et en l'occurrence la date de Pâques qui est la principale, car variable et déterminant 2 autres jours fériés.

    J'ai fait une copie des feuilles (qui comprennent par mal de formules) sans prendre celles qui déterminent les dates et j'ai ensuite utilisé la formule : "Date de Pâques grégorienne (algorithme de "GAUSS)" qui, quelque soit l'année demandée affiche dans une cellule "31/12/1905" puis ensuite, en utilisant "DateSerial" affiche la date réellement demandée.

    Le fichier a sûrement du code protégé non modifiable.
    Le problème :
    - dès que je crée un fichier comprenant "DateSerial", c'est le 31/12/1905 qui est affiché et utilisé.

    J'ai ensuite utilisé la formule : ARRONDI(DATE(B2; 4; MOD(234-11*MOD(B2; 19); 30))/7; 0)*7-6, mais cela n'a rien changé non plus pour "DateSérial".

    J'ai maintenant supprimé les fichiers, mais ça ne change rien pour ce "DateSerial" = 31/12/1905 sur n'importe quel nouveau fichier.
    Heureusement, cela n'impacte pas les fichiers existants qui utilisent cette fonction.
    Je ne sais pas si je me suis bien fait comprendre, mais c'est vraiment un gros problème.
    Je remercie d'avance la personne qui éventuellement pourra me dépanner.
    Sinon il me restera la solution, en dernier ressort, de réinstaller Excel.
    Dernière modification par Invité ; 29/05/2021 à 11h51.

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 108
    Points : 171
    Points
    171
    Par défaut
    Bonjour

    Je ne suis pas un expert bien que senior++
    Hypothèse : Excel 2003 sous un OS Windows type NT ou antérieur ne gérait peut-être pas les dates sous un format binaire compatible avec les nouvelles versions sauf à charger un pack de compatibilité Microsoft qui a été abandonné?
    Même avec le fichier d'origine, je crains que vu la date de péremption d'Excel 2003, il n'y ait pas de support de Microsoft

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Merci pour la réponse.
    Mais en fait, sur le principe, il n'y aucun problème : dans une application de suivi des comptes bancaires que j'ai faite il y a 14 ou 15 ans et que j'ai améliorée et complétée régulièrement, tout fonctionne parfaitement :
    - la formule : "Arrondi(DATE(B2; 4; MOD(234-11*MOD(B2; 19); 30))/7; 0)*7-6"
    - ainsi que la fonction "DateSérial"
    fonctionnent parfaitement et depuis longtemps, c'est ce fichier que je n'aurai jamais dû enregistrer et qui a pourtant été créé avec le VBA d'Excel 2003 qui fait que la fonction n'est plus utilisable et uniquement que pour un nouveau fichier. Il y a beaucoup de formules, mais je crois maintenant qu'il contient du code protégé par un mot de passe.

    Je crois que je vais essayer de réinstaller Excel, même s'il y a du temps à passer pour en revenir à ce qui existe actuellement.

  4. #4
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour.
    Peut-être que la question n'est pas dans le bon forum, car ici ça parle du VBA et pas des formules Excel.
    Parenthèse faite voici un code en VBA pour calculer le jour de pâques :

    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
    '------------------------------------------------------------------------------------------------
    Public Function CalculPaquesThomasOBeirne(f_Annee As Long) As Long
    '------------------------------------------------------------------------------------------------
    ' Formule de Thomas O'Beirne validée de 1901 à 2099.
    '------------------------------------------------------------------------------------------------
    Dim n, a, b, c, d, e, p As Integer
     
    ' La fête de Pâques a été fixée par le concile de Nicée (325) au premier dimanche
    ' après la pleine lune qui a lieu soit le jour de l'équinoxe de printemps (21 mars),
    ' soit aussitôt après cette date. Pâques est donc au plus tôt le 22 mars. Si la pleine
    ' lune tombe le 20 mars, la suivante sera le 18 avril (29 jours après). Si ce jour est
    ' un dimanche, Pâques sera le 25 avril. Ainsi, la fête de Pâques oscille entre le 22 mars
    ' et le 25 avril, et de sa date dépendent celles des autres fêtes mobiles.
    ' (c) Larousse.
     
    ' Calcule la valeur de pâques:
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    n = f_Annee - 1900
    a = f_Annee Mod 19
    b = Int((a * 7 + 1) / 19)
    c = ((11 * a) - b + 4) Mod 29
    d = Int(n / 4)
    e = (n - c + d + 31) Mod 7
    p = 25 - c - e
    CalculPaquesThomasOBeirne = DateSerial(f_Annee, 3, 31 + p)
     
    End Function
    Pour une utilisation dans une formule Excel voir ici : https://laurent-ott.developpez.com/t...ba-tome-6/#LVI
    Cordialement.

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Salut.

    DateSerial n'est pas une fonction EXCEL mais une fonction VBA...Sans le code qui va avec, on peut difficilement aider et une mise en situation nous aiderait à comprendre.

    DateSerial(Year, Month, Day) ne pose en soi aucun problème, dès lors que l'on a compris que l'on peut "déborder"... => DateSerial(2020,19,73) est parfaitement valide pour le VBA...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour laurent_ott et Pierre,

    Tout d'abord, merci pour vos réponses.

    En ce qui concerne la fonction "DateSerial", depuis des années que j'utilise Excel et le VBA, pas de problème, c'était bien utilisé en VBA
    et partir d’un fichier téléchargé qui comprenait trois feuilles, j'ai copié les feuilles "1er semestre" et "2e semestre"» dans un autre fichier.

    Je voulais définir le jour de Pâques, qui permet de connaître les dates des deux autres cas et pour m’amuser j’ai utilisé la méthode Meeus, qui tient compte du calendrier Grégorien, c’est-à-dire une année bissextile sur quatre et non pas systématiquement tous les 4 ans comme le calendrier Julien (et comme le fait la formule toute faite que l’on trouve pour Excel).

    Je n’ai toujours pas l’explication de la "DateSerial" utilisée dans un autre module VBA qui, jusqu’au calcul de la date de Pâques est bien conforme (je vérifie en passant la souris sur le résultat) mais qui dans la ligne finale (ex : cells(2,1) = dat1) affiche "01/01/1905".

    J’abandonne pour une solution simple : utilisation de la formule classique puis division par 4 du nombre formé par les deux premiers chiffres et si le reste est différent de 0, pas d’année bissextile.
    Ça ne ma satisfait pas de ne pas pouvoir comprendre, mais…

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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