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 :

probleme fonction cstr


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Par défaut probleme fonction cstr
    Bonjour,

    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    date_case = Format(ActiveSheet.Cells(5, i), "d/mm")
    nouvelle_date = CDate("date_case" & CStr(Year(ActiveSheet.Cells(5, i).Value) + 3))

    je récupère au grace à la fonction Format la date contenue dans une cellule au format jour/mois
    ensuite je voudrais ajouter à une nouvelle date la date formatée et l'année que je souhaite, cependant j'ai un message d'erreur "imcompatibilitée de type"

    Pouvez vous m'aider la dessu

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    salut,
    tu as utilisé date_case en tant que chaine de caractère.
    d'autre part, je te recommande l'utilisation de la fonction DateAdd
    un lien de la à ce sujet
    http://access.developpez.com/faq/?page=dates#dateAdd
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

    je pense que l'erreur est là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouvelle_date = CDate("date_case" & CStr(Year(ActiveSheet.Cells(5, i).Value) + 3))
    je mettrais ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouvelle_date = CDate(date_case) & CStr(Year(ActiveSheet.Cells(5, i).Value) + 3)
    mais tout dépend du résultat attendu
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Par défaut
    Casefayere,

    Merci pour ta solution, je n'ai pu de message d'erreur,certes mais ta solution ne modifie pas mon contenu de cellule, elle ajoute la date a la suite,
    je me retrouve donc avec une cellule 29/02/20092012 :s

    Merci quand même.

    Je vais me pencher sur la fonction dateadd()

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    ou tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(year(ActiveSheet.Cells(5, i)+3), Month(ActiveSheet.Cells(5, i)), Day(ActiveSheet.Cells(5, i)))

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    je n'aurais pas qualifier le code de simple, mais il a le mérite de fonctionner
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour jpcheck,

    D'abord : amitiés...

    Ensuite : regarde bien ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command2_Click()
      Dim date_case As Date
      date_case = "29/02/2000" ' j'ai fait exprès de choisir cette date
      MsgBox DateSerial(Year(date_case) + 3, Month(date_case), Day(date_case))
      MsgBox DateAdd("yyyy", 3, date_case)
    End Sub
    Aprés, ma foi, c'est une question de connaître le but exact du demandeur ...

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    les joies des fonctions spécifiques
    Dateserial est très utile pour générer l'ensemble des dates disponibles, et ceux quelles que soient les valeurs entières passées en paramètres.

    Ici, le 29e jour de février 2003 n'existant pas, on arrive logiquement sur le 1er mars.

    mais comme indiqué aussi dans l'aide en ligne,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      date_case = "31/01/1995"
      Debug.Print DateAdd("m", 1, date_case)
    Debug.Print DateSerial(Year(date_case), Month(date_case) + 1, Day(date_case))
    doit-on choisir fin de mois, ou 365.24/12 jours
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Dateserial ne se trompera jamais car il fonctionne avec des nombres, dans des séries (il ne calcule donc jamais sur la base de fractions...)
    Lorsque je veux être sûr de ce que je fais, je ne me sers que de lui...

    EDIT :
    Après, comm je le disais plus haut, c'est vraiment une question de choix en fonction du but exact.
    Car ce ne sont pas les fonctions spécifiques seules qui sont mises en cause, mais les notions elles-mêmes de "dates", de "durée" et d'"âge" (les deux dernières n'ont pas la même signification.
    On peut toujours, sans se tromper (informatiquement ou manuellement) calculer une durée ou un âge en jours, mais l'âge et la durée sont deux choses différentes (et on le voit bien lorsque l'on cherche à s'exprimer en mois).
    C'est la raison pour laquelle, par exemple, l'âge des nourrissons est toujours calculé en jours et jamais en conjugaison mois + jours. Ceci pour éviter, en calculant en mois, que le bébé né par exemple le 28 janvier 2003 ne se retrouve (le 28/02/2003) avec le même âge (en mois, donc) que celui né le 29/01/2003, celui né le 30/01/2003 et celui né le 31/01/2003 ! (la différence, de 3 jours en valeur absolue entre les deux extrêmes, génèrerait un delta relatif d'environ 10% !!!).
    Mais les nourrissons ne sont pas seuls concernés ! il suffit, pour le comprendre, d'imaginer que l'on paye un employé à la journée en lui versant sa rémunération à la fin de l'année. Il sera rémunéré sur la base du nombre de jours de travail effectif.
    Voilà donc : âge et durée temporelle sont des choses différentes. Le premier est calendaire et la deuxième s'exprime en unités temporelles (en cycles par rapport au soleil)

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/04/2009, 20h17
  2. [Mail] Probleme fonction mail()
    Par tissot dans le forum Langage
    Réponses: 1
    Dernier message: 14/11/2005, 12h55
  3. problème fonctions callback
    Par youp_db dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 02/10/2005, 14h47
  4. probleme fonction gethostbyname
    Par oclone dans le forum Développement
    Réponses: 6
    Dernier message: 14/04/2005, 10h31
  5. probleme fonction syntaxe
    Par gIch dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2005, 09h52

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