Bonjour,
Je cherche a mettre dans une seul cellule
Ecrire une date et en écrivant la date que sa me rajoute 1an en plus
Je sais que cela est possible avec 2 cellule mais moi je voudrai sa dans une seul cellule
Bonjour,
Je cherche a mettre dans une seul cellule
Ecrire une date et en écrivant la date que sa me rajoute 1an en plus
Je sais que cela est possible avec 2 cellule mais moi je voudrai sa dans une seul cellule
Bonjour Totof77,
tu as écrit : « je voudrais ça dans une seule cellule »
ok, mais si c'est dans une seule cellule, c'est impossible de le faire
par formule ; on est obligé d'écrire un code VBA pour le faire, et
c'est la macro qui va se charger de faire ce travail.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
je te propose ce fichier Excel :
https://www.cjoint.com/c/MHlm0PhtdP0
à toi de faire des essais. :)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
code VBA de Feuil1 (14 lignes) :
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .CountLarge > 1 Then Exit Sub
If .Address <> "$C$2" Then Exit Sub
If .Value = "" Then Exit Sub
If Not IsDate(.Value) Then Exit Sub
Application.EnableEvents = 0
.Value = DateAdd("yyyy", 1, .Value)
Application.EnableEvents = -1
End With
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
si besoin, tu peux demander une adaptation ;
à te lire pour avoir ton avis. :)
rhodo
Je connaissais même pas le code VBA merci pour cette découverte
Comment on crée comment on crée un code VBA ?
Merci beaucoup pour ton aide
@Totof77
VBA est le langage de programmation des applications Office (Word, Excel, etc...) ;
VBA est le sigle de « Visual Basic for Application ».
dans un code VBA, les macros sont faites en écrivant des Sub ou des Function ;
Function = Fonction ; Sub = abréviation de Subroutine = Sous-programme.
comment on crée un code VBA ? les débutants peuvent utiliser l'Enregistreur de
macros (mais ça crée un code général non optimisé) ; ceux qui s'y connaissent
mieux peuvent écrire un code VBA (optimisé) directement dans l'Éditeur VBA
(c'est la fenêtre "Microsoft Visual Basic" que tu vois quand tu fais Alt F11 ; puis
fais de nouveau Alt F11 pour revenir sur la fenêtre d'Excel).
rhodo
@rhodo
J’ai essayer beaucoup de choses mais j’ai pas trouver
Comment je peut faire avec ton code pour mettre plusieur cellule
Exemple c2 a c5 et e3 a e8
Merci de ton aide
Bonjour Totof77,
sur mon post du 11 août à 15:06, ton commentaire du
21 août à 10:02 mentionne les cellules C3 à C7.
dans ce cas, dans mon code VBA, remplace cette ligne :
If .Address <> "$C$2" Then Exit Sub
par celle-ci :
If Intersect(Target, [C3:C7]) Is Nothing Then Exit Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ton post précédent du 21 août à 19:47 mentionne
les cellules C2 à C5 et E3 à E8.
dans ce cas, la ligne doit être celle-ci :
If Intersect(Target, [C2:C5, E3:E8]) Is Nothing Then Exit Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ne modifie rien d'autre, et ça devrait être ok. :)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
exemple de fichier pour la plage unique C3:C7 :
https://www.cjoint.com/c/MHwsDArwEU0
rhodo
Merci rhodo pour ta grande aide
Maintenant je voudrai faire la meme choses mais pour ajouter 2 ans et un autre pour ajouter 6mois
Je penser qu’il fallait juste modifier le 1 par 2 sur ce code
.Value = DateAdd("yyyy", 1, .Value)
Et mettre un m au lieux des yyyy
.Value = DateAdd("m", 6, .Value)
Mais sa ne fonctionne pas
J’ai essayer de le mettre en 3 fois ton code avec les 3 changement de date
Merci beaucoup rhodo
@Totof77
ce que tu as indiqué est bon :
pour ajouter 2 ans : .Value = DateAdd("yyyy", 2, .Value)
pour ajouter 6 mois : .Value = DateAdd("m", 6, .Value)
rhodo
@Totof77
je te propose cette version v3 : https://www.cjoint.com/c/MHArMzqQWa0
fais des saisies de dates dans les cellules sur fond jaune clair. :)
le type d'ajout est noté en ligne 11 ; mais c'est valable seulement
pour LA COLONNE OÙ C'EST NOTÉ, pour les cellules jaunes
situées au-dessus.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
code VBA du module de Feuil1 (18 lignes) :
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s$, k As Byte
With Target
If .CountLarge > 1 Then Exit Sub
If Not Intersect(Target, [C2:C5]) Is Nothing Then s = "yyyy": k = 2 _
Else If Not Intersect(Target, [E3:E8]) Is Nothing Then s = "m": k = 6 _
Else If Not Intersect(Target, [H4:H6]) Is Nothing Then s = "ww": k = 3
If k = 0 Then Exit Sub
If .Value = "" Then Exit Sub
If Not IsDate(.Value) Then Exit Sub
Application.EnableEvents = 0
.Value = DateAdd(s, k, .Value)
Application.EnableEvents = -1
End With
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
essaye d'adapter cet exemple à ton cas réel. :)
rhodo
@Totof77
Lis d'abord mes 2 posts précédents, du 24 août et du 25 août. :)
si tu n'as pas réussi à adapter mon exemple à ton cas réel, tu dois envoyer
un fichier Excel exemple, en précisant quelles sont les plages de cellules
où tu fais ta saisie ET le type d'ajout pour chaque plage concernée par
cet ajout (par exemple : pour J7:J12, il faut ajouter 5 mois).
selon l'organisation de tes données dans ton fichier réel (et selon le type
d'ajout), il faudra peut-être une autre méthode de codage VBA.
pour joindre ton fichier : va sur le site de partage de fichiers cjoint.com
(c'est gratuit, et c'est très bien expliqué comment faire) ; tu devras coller
dans ton prochain post ici le lien de téléchargement que tu auras copié
sur cjoint.com (avec le clic droit).
sans réponse de ta part, ça signifiera que c'est réglé,
et que tu n'as plus besoin d'aide pour cet exo. :)
rhodo
@Totof77
attention : dans mon post du 25 août à 11:27, j'ai remplacé
mon fichier joint par un autre (code VBA plus optimisé). :)
donc si tu l'avais déjà téléchargé avant, tu dois de nouveau
le télécharger afin d'avoir la nouvelle version.
sous le fichier joint, dans le post, j'ai mis le nouveau code
VBA ; il est mieux écrit, et il fait maintenant 18 lignes. :)
rhodo
@rhodo
Désoler de ne pas avoir repondu je n’avais pas vu
Est ce que tu aurai une adresse mail a me communiquer car le fichier excel est priver et je ne peut pas le diffuser sur internet
Sa commence a devenir technique pour moi
@Totof77
sur ce site, il n'y a pas de messagerie privée ; si on met son adresse mail sur
le forum (qui est par définition public), elle est visible par tous, y compris par
les spammeurs ➯ on risque de se faire inonder par des spams sur sa boîte
mail privée ! :(
il ne faut donc pas mettre d'adresse mail personnelle sur le forum.
----------------------------------------------------------------------------------------------------------------
comme ça commence à devenir technique pour toi, je te propose d'envoyer une
copie de ton fichier excel privé où tu auras remplacé les données réelles par
des données anonymes ; fais un fichier allégé où il y a uniquement les feuilles
concernées par le problème à résoudre (ici l'addition d'un intervalle de temps
à une date saisie) ; les emplacements des cellules doivent être les mêmes
que dans ton fichier réel ; les intervalles de temps à ajouter doivent aussi être
les mêmes que dans ton fichier réel ; comme ça, tu n'auras pas à faire une
adaptation de mon prochain code VBA. :)
----------------------------------------------------------------------------------------------------------------
d'un autre côté, dans mon code VBA, voici la seule partie à changer :
If Not Intersect(Target, [C2:C5]) Is Nothing Then s = "yyyy": k = 2 _
Else If Not Intersect(Target, [E3:E8]) Is Nothing Then s = "m": k = 6 _
Else If Not Intersect(Target, [H4:H6]) Is Nothing Then s = "ww": k = 3
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
au bout d'la 1ère ligne, y'a s = "yyyy": k = 2 ➯ ajout de 2 ans, pour la plage de
cellules C2:C5 ; pour un type d'ajout de 2 ans, si c'est aussi pour les 2 plages
K12:K16 et P24:P32, alors dans la 1ère ligne du test If mets :
[C2:C5, K12:K16, P24:P32] à la place de [C2:C5].
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
au bout d'la 2ème ligne, y'a s = "m": k = 6 ➯ ajout de 6 mois, pour la plage de
cellules E3:E8 ; tu peux ajouter d'autres plages de cellules à E3:E8 comme tu
l'as fait pour C2:C5 (si c'est aussi pour 6 mois).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
au bout d'la 3ème ligne, y'a s = "ww": k = 3 ➯ ajout de 3 semaines, pour la
plage de cellules H4:H6 ; tu peux ajouter d'autres plages à H4:H6 comme
tu l'as fait pour C2:C5 (si c'est aussi pour 3 semaines).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
tu peux ajouter d'autres lignes de code VBA au groupe du test If, mais 1 seule
ligne pour chaque intervalle de temps différent des 3 autres.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
attention : TOUTES les lignes du test If doivent se terminer par un caractère
souligné « _ » SAUF la dernière ligne du test If.
« _ » est le caractère de continuation de ligne : ça indique à VBA que la
ligne d'instruction n'est pas terminée et continue sur la ligne suivante.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dans le code VBA, l'intervalle de temps est réellement ajouté plus bas
que dans le groupe du test If : c'est fait par cette ligne de code VBA :
.Value = DateAdd(s, k, .Value)
----------------------------------------------------------------------------------------------------------------
si tu arrives à faire toi-même TOUS les changements nécessaires, selon toutes
mes indications ci-dessus, tu n'auras même pas besoin d'envoyer un fichier
allégé avec des données anonymes. ;)
rhodo
@rhodo
J’ai essayer de taper ton code sur mon fichier mais quand me met les « _ » sa me met ( erreur de compilation:erreur de syntaxe)
Et quand je retire les « _ » sa me met (erreur de compilation: else sans if)
Pensant trouver le probleme tout seul je n’y arrive pas
Voici ce que j’ai ecrit
Option Explicit
Private Sub worksheet_change(ByVal target As Range)
Dim s$, k As Byte
With target
If .CountLarge > 1 Then Exit Sub
If Not Intersect(target, [O2:O46]) Is Nothing Then s = "yyyy": k = 15_
Else: If Not Intersect(target, [J2:J6]) Is Nothing Then s = "yyyy": k = 2_
Else: If Not Intersect(target, [H2:H46]) Is Nothing Then s = "yyyy": k = 1_
Else: If Not Intersect(target, [M2:M46]) Is Nothing Then s = "m": k = 6
If k = 0 Then Exit Sub
If .Value = "" Then Exit Sub
If Not IsDate(.Value) Then Exit Sub
Application.EnableEvents = 0
.Value = DateAdd(s, k, .Value)
Application.EnableEvents = -1
End With
End Sub
je vais essayer de t’envoyer le fichier mais je te promet rien
Merci de ton aide
@Totof77
a) pour le caractère souligné ( _ ) : j'ai oublié de te préciser qu'il faut un
caractère espace ( ) avant le souligné : il ne doit pas être collé contre
un autre caractère (chiffre, lettre, ou autre).
b) y'a un caractère ( : ) en trop juste après le mot « Else » ; des fois, c'est
l'éditeur VBA qui le rajoute automatiquement, même s'il n'en faut pas ;
il faut faire très attention à cet ajout automatique de ( : ) car quand ça se
produit, il faut supprimer le ( : ) ; sans cela, ça signifie « Sinon rien »
au lieu de « Sinon la suite du code qui est à droite ».
c) pour l'ajout de 2 ans, ça doit être J2:J46 au lieu de J2:J6 : tu as oublié
le chiffre 4 ; c'est mieux de mettre les colonnes dans leur ordre naturel
(c'est juste pour une meilleure lisibilité) : H ; J ; M ; O ➯
pour H2:H46 : ajouter 1 an ; pour J2:J46 : ajouter 2 ans ; pour
M2:M46 : ajouter 6 mois ; pour O2:O46 : ajouter 15 ans.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voici le code VBA corrigé, avec une petite optimisation
en plus qui évite de mettre 3× « s = "yyyy" ».
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s$, k As Byte: s = "yyyy"
With Target
If .CountLarge > 1 Then Exit Sub
If Not Intersect(Target, [H2:H46]) Is Nothing Then k = 1 _
Else If Not Intersect(Target, [J2:J46]) Is Nothing Then k = 2 _
Else If Not Intersect(Target, [M2:M46]) Is Nothing Then s = "m": k = 6 _
Else If Not Intersect(Target, [O2:O46]) Is Nothing Then k = 15
If k = 0 Then Exit Sub
If .Value = "" Then Exit Sub
If Not IsDate(.Value) Then Exit Sub
Application.EnableEvents = 0
.Value = DateAdd(s, k, .Value)
Application.EnableEvents = -1
End With
End Sub
rhodo
@rhodo
Nickel sa fonctionne
Mais je me suis rendu compte d’un probleme pour les cellules de la colonne O donc +15ans
Je peut avoir entre une date et 8 date differente
Exemple O2 je voudrai mettre les date suivante
11/06/2020
11/06/2022
11/06/2015
Y a t’il une solution ?
Et sa pour les cellules de O2 a O46
@Totof77
tu as écrit : « Exemple : en O2 je voudrais mettre les dates suivantes :
11/06/2020 ; 11/06/2022 ; 11/06/2015 »
si tu veux saisir ces 3 dates successivement, l'une après l'autre :
ok, y'a pas de problème :
a) en O2, tu saisis 11/06/2020 ➯ retour : 11/06/2035
b) en O2, tu saisis 11/06/2022 ➯ retour : 11/06/2037
c) en O2, tu saisis 11/06/2015 ➯ retour : 11/06/2030
bien sûr, tu peux saisir une seule date en O2, pas plus !
➯ en O2, tu ne peux pas saisir à la fois les 3 dates !
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comme pour l'ajout de 15 ans la plage est O2:O46, ça te fait 45 cellules
où tu peux saisir une date (une seule saisie de date par cellule) ; alors
quand tu écris « Je peux avoir entre une date et 8 dates différentes »,
je ne vois pas où est ton problème : dans 45 cellules différentes,
y'a largement la place de saisir 8 dates différentes ! :)
rhodo
Nan c’est pas ce que je veut desoler j’etait pas assez precis
Enfaite imaginons que la cellules O2 je doit mettre plusieurs date pour raison X
Je fait alt+entree pour aller a la ligne pour pouvoir entree les 3 date que je t’ai donner
Et pour repondre a t’as solution elle ne peut pas marcher dans mon cas vu que les ligne 2 à 46 correspond a un vehicule chacune et la lettre O correspond a plusieurs date de peremption
Je sais pas si tu vois ce que je veut te dire
@Totof77
j'ai écrit : « bien sûr, tu peux saisir une seule date en O2, pas plus !
➯ en O2, tu ne peux pas saisir à la fois les 3 dates ! »
et toi tu écris : « En fait imaginons que dans la cellule O2 je dois mettre
plusieurs dates pour raison X ; je fais Alt Entrée pour aller à la ligne
pour pouvoir entrer les 3 dates que je t’ai données. »
dans ce cas de saisie de plus d'une date dans une même cellule,
mon code VBA n'est plus valable ! ce que tu as bien compris car
tu as écrit :
« Et pour répondre à ta solution elle ne peut pas marcher dans mon cas
vu que les lignes 2 à 46 correspondent chacune à un véhicule et la lettre
O correspond à plusieurs dates de péremption. »
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
comme tu veux saisir plusieurs dates dans une même cellule en les
séparant par Alt Entrée, c'est bien plus compliqué à faire ! :(
rhodo
on s'est croisés ; relis entièrement
mon post précédent de 15:19. ;)
Oui mais tu as dit
« dans ce cas de saisie de plus d'une date dans une même cellule,
mon code VBA n'est plus valable ! ce que tu as bien compris«oui, c'est bien ça ; pour pouvoir traiter les cas de saisie de plusieurs dates
dans une même cellule, il faut un autre code VBA, qui sera différent.
@rhodo
Je vais créer une adresse mail que je supprimera afin de pouvoir t’envoier le tableau excel
Et pouvoir te communiquer tout mes besoin sa sera plus simple
Si tu es okay
@Totof77
je viens de lire ton post de 17:07 ; mais pour ce que tu proposes, c'est encore trop tôt : laisse-moi
d'abord essayer de trouver une solution par rapport à la saisie de plusieurs dates dans une même
cellule ; ça va prendre beaucoup de temps car c'est assez compliqué à faire. ;)
au cas où je trouverai une solution valable, j'écrirai un post qui contiendra un petit fichier exemple ;
tu regarderas ce fichier, et s'il te conviendra, il n'y aura plus qu'à adapter à ton fichier réel (ça sera
quelques modifs simples) ; et peut-être que tu n'auras même pas besoin de joindre ton fichier. ;)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
d'autre part, tu as écrit : « tous mes besoins » ; attention : ce présent sujet est uniquement pour le
problème en cours de saisie de dates avec ajout d'un intervalle de temps ; ainsi, ça correspond au
titre de ce sujet "Formule date", et sur un forum, la règle est : « 1 sujet = 1 question » ➯ si t'auras
d'autres choses à demander, tu devras créer un nouveau sujet pour chaque chose différente ; j'y
répondrai pas forcément : seulement si j'aurai une solution valable à proposer, et aussi si je serai
disponible (car des fois, je n'ai pas le temps de venir sur ce site).
juste pour info : sur les forums d'entraide, ce ne sont pas des salariés rémunérés qui répondent
de telle heure à telle heure : ce sont des bénévoles, qui répondent sur leur temps libre ➯ si par
exemple on doit s'absenter pour aller faire des courses au supermarché, on ne peut pas être
en même temps devant notre PC. ;)
rhodo
@rhodo
Bien comprit je ferais des nouveaux sujet pas de probleme
Apres tout prend ton temps je ne suis pas presser
Oui je le sais bien avant tout on est humain et une vie donc c’est normal
J’attend ton retour
Merci de ton aide et de ton temps précieux
Bonjour Totof77,
j'ai trouvé une solution valable. :) mais ça a pris beaucoup de temps,
car ça a été bien plus compliqué que prévu. :(
fichier exemple, version v5 : https://www.cjoint.com/c/MIbuXFBg8T0
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ATTENTION : pour ceux qui ont déjà téléchargé l'ancienne version v4 :
il ne faut PAS L'UTILISER, car elle contient un gros bug ! :( ce bug,
c'est une date qui s'inverse parfois ; exemple : 02/03 qui est 2 mars
devient 03/02 qui est 3 février. :( j'ai réussi à réparer ce gros bug ➯
vous pouvez télécharger la version v5 ci-dessus. :)
j'ai aussi fait quelques améliorations ; le code VBA est de 57 lignes.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dans une des cellules de O2:O46, tu peux saisir une seule date, OU
plusieurs dates séparées par Alt Entrée ; pour chaque date saisie,
tu peux la saisir de la façon habituelle ➯ par exemple, pour la date
du 05/08/2023, tu peux la saisir selon ces 8 façons :
a) 05/08/2023
b) 5/08/2023
c) 05/8/2023
d) 5/8/2023
e) 05/08 (comme y'a pas d'année, ça met automatiquement
l'année en cours, donc 2023)
f) 5/08 (idem)
g) 05/8 (idem)
h) 5/8 (idem)
d'autre part, pour ce qui concerne l'année :
a) si tu saisis 2/6/2020, c'est comme : 02/06/2020
b) si tu saisis 2/6/2015, c'est comme : 02/06/2015
c) si tu saisis 2/6/12, c'est comme : 02/06/2012
(car y'a un ajout automatique de 2000)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bien sûr, quand le jour ou le mois sur 2 chiffres commencent par 0,
c'est à la fois plus simple et plus rapide de ne pas le taper ➯ saisie
accélérée. :)
saisie accélérée aussi quand on peut taper une année sur 2 chiffres,
et aussi quand c'est inutile de taper l'année car c'est l'année en
cours. :)
si l'utilisateur fait une saisie de date erronée, ça ne fera pas planter
le code VBA, car la date erronée sera simplement ignorée. ;)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
à toi de tester des saisies de dates dans ces colonnes :
H, J, M, O (lignes 2 à 46).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fais Alt F11 pour voir le code VBA (57 lignes).
rhodo
@Totof77
désolé pour le très gros retard, mais cette fois c'est ok : le fichier est prêt. :)
tu trouveras la version v5 dans mon post précédent, en remplacement
de l'ancienne version v4 (qui était malheureusement boguée).
je te laisse télécharger v5, et faire plusieurs tests de saisie de dates ;
à te lire pour avoir ton avis. :)
rhodo
Salut
Désoler pour le temps passer j’ai du m’absenter
J’ai pu essayer ton VBA c’est nickel
Mais je rencontre un problème sur la colonne O ou je peut rentre plusieurs date
Le problème est que quand je tape la premier date donc imaginons que je met 01/01/2000 sa va me mettre 01/01/2015 et après si plus tard je veut rajouter une 2eme date imaginons que je met 01/01/2010 sa va mettre 01/01/2025 mais sa me modifier aussi la date 01/01/2015 en lui rajoutant +15
Je suis obliger de taper toute les date en meme temps
Y-a t’il une solution pour ce probleme ?
Merci pour le travail que tu as fait