Nombre de jours par mois

Bonjour dans la macro:

"Worksheets("IMIDAZOLE").Range("E9").Value = Range("D9") + 30"

La cellule D9 correspond à une date.

Je voulais ajouter ( si le mois dans la cellule D9 est de 30 jours ajouter 30, mais si le nombre de jours correspond à 31 ajouter 31)

Merci pour vos réponses

Bonjour,

en F9, sans macro

=DATE(ANNEE(E9);MOIS(E9)+1;JOUR(E9))

avec macro (formule)

Range("F9").FormulaR1C1 = "=DATE(YEAR(RC[-1]),MONTH(RC[-1])+1,DAY(RC[-1]))"

Désolé mais en f9 j'ai d'autres données.

Je souhaite qu'en cellule E9 la date correspond à la date en D9+30 jours ou 31.

Si la date en D9 est de 31.

Désolé mais en f9 j'ai d'autres données.

Je souhaite qu'en cellule E9 la date correspond à la date en D9+30 jours ou 31.

Si la date en D9 est de 31.

Il faut peut-être fournir les infos utiles dès le départ !

31 ne constitue pas à soi-seul une date, c'est éventuellement un quantième de jour !

Pour mettre une date espacée d'un mois par rapport à D9 :

=MOIS.DECALER(D9;1)

Cordialement.

Salut Steelson !

En fait, je voudrai quelque chose comme ça sauf que ça ne marche pas:

If Range("D9") = NombreDeJoursDansMois30 Then

Worksheets("IMIDAZOLE").Range("E9").Value = Range("D9") + 30

If Range("D9") = NombreDeJoursDansMois31 Then

Worksheets("IMIDAZOLE").Range("E9").Value = Range("D9") + 31

If Range("D9") = NombreDeJoursDansMois31 Then

Worksheets("IMIDAZOLE").Range("E9").Value = Range("D9") + 31

MOIS.DECALER(D9;1)

Si je met ça:

Worksheets("IMIDAZOLE").Range("E9").Value = MOIS.DECALER("D9:1")

Ca m'affiche objet requis

Sans fichier ni explications suffisantes sur quoi est quoi, je n'en vois pas la nécessité. Si le résultat doit être une date, je crois bien que je n'en verrai de toute façon pas la nécessité.

Si je ne vois pas de nécessité, je m'abstiens. S'il n'y a pas nécessité de VBA, je n'en fournis pas !

Le nombre de jours d'un mois est fourni par une soustraction élémentaire... mais on n'en a nul besoin pour produire une date !

Cordialement.

MOIS.DECALER(D9;1)

Si je met ça:

Worksheets("IMIDAZOLE").Range("E9").Value = MOIS.DECALER("D9:1")

Ca m'affiche objet requis

Si tu ne parviens pas à distinguer VBA et Formule, il y a encore beaucoup de travail à faire !

Sub Macro53()

'Insertion d'une ligne

Sheets("IMIDAZOLE").Select

Worksheets("IMIDAZOLE").Select

Application.ScreenUpdating = False

ActiveSheet.Unprotect

Rows("9:9").Select

Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow

Range("A9").Select

Worksheets("IMIDAZOLE").Range("A9").Value = Worksheets("Saisie IMIDAZOLE").Range("A9").Value

Worksheets("Saisie IMIDAZOLE").Range("A9").Value = ""

Worksheets("IMIDAZOLE").Range("B9").Value = Worksheets("Saisie IMIDAZOLE").Range("B9").Value

Worksheets("Saisie IMIDAZOLE").Range("B9").Value = ""

Worksheets("IMIDAZOLE").Range("C9").Value = Worksheets("Saisie IMIDAZOLE").Range("C9").Value

Worksheets("Saisie IMIDAZOLE").Range("C9").Value = ""

Worksheets("IMIDAZOLE").Range("D9").Value = Worksheets("Saisie IMIDAZOLE").Range("D9").Value

Worksheets("Saisie IMIDAZOLE").Range("D9").Value = ""

Worksheets("IMIDAZOLE").Range("E9").Value = Range("D9") + 30

If Range("E9") > Range("C9") Then Range("E9") = Range("C9")

If Range("D9") = "" Then Range("E9") = ""

Worksheets("IMIDAZOLE").Range("F9").Value = Worksheets("Saisie IMIDAZOLE").Range("F9").Value

Worksheets("Saisie IMIDAZOLE").Range("F9").Value = ""

ActiveSheet.Protect

Worksheets("IMIDAZOLE").Activate

End Sub

Du code enregistré ! Toujours mauvais tant que pas entièrement réécrit... Ici les modifications apportées ne l'ont pas arrangé. Le code utile occuperait moitié moins de place.

Tant que l'on ne visualise pas l'objectif en situation, on ne peut se prononcer sur le fond.

Le fichier est trop gros pour etre envoyé

Ce qui ne te dispense pas des explications un peu plus étoffées que tu aurais dû fournir... Et un fichier modèle réduit est toujours réalisable et devrait permettre de cerner concrètement l'objectif et faire des propositions adaptées !

Jai un tableau avec plusieurs dates:

Dates de péremption

Date d'ouverture

Date de fin d'utilisation

J'attends, que quand je rentre la date d'ouverture en D9, la date de fin d'utilisation ce calcul automatiquement en E9.

La date de fin d'utilisation c'est 30 jours si le mois rentré en D9 est de 30 jours ou 31 si le mois rentré en D9 est de 31.

D'où D9+30

Par exemple si je rentre 1/05/18 en ouverture la date de fin d'utilisation doit être le 1/06/18

Eh bien !

    .Range("E9") = DateAdd("m", 1, .Range("D9"))

NB- les points doivent faire référer les objets Range à l'objet Worksheet parent...

Merci beaucoup

Désolé mais en f9 j'ai d'autres données.

Je souhaite qu'en cellule E9 la date correspond à la date en D9+30 jours ou 31.

Si la date en D9 est de 31.

désolé, j'ai voulu dire E9 !

Permets-moi tout de même quelques remarques de nature à améliorer ton code (sans me prononcer sur le fond, c'est à dire l'adéquation à l'objectif, ainsi que je l'avais déjà exprimé) :

- Faire disparaître les Select et Activate, c'est une base pour remettre en ordre du code enregistré ! Il s'agit d'opérations parasites en cours d'exécution, dont l'effet est de la ralentir...

- Lorsqu'on opère avec 2 feuilles, la bonne pratique est le plus souvent de placer l'une des feuilles sous bloc With et d'affecter l'autre à une variable, de façon à pouvoir qualifier toutes les expressions dans les meilleures conditions.

- Procéder par affectation de valeurs est une bonne chose, mais cellule par cellule c'est une déperdition : l'affectation pouvait être faite globalement pour la plage A9:F9, une seule ligne ! et il n'y avait plus ensuite qu'à rectifier E9...

De même, l'affectation d'une même valeur à toutes les cellules d'une plage peut se faire en une fois, masi au cas particulier, il était mieux d'effacer plutôt que mettre la valeur "" (texte vide).

Cordialement et bonne continuation.

Rechercher des sujets similaires à "nombre jours mois"