Appliquer un code sur des colonnes

Bonsoir,

Je voudrais appliquer le code sur les colonnes respectives mais je ne sais pas comment faire

J'ai essayé les fonctions column, entirecolumn, etc.

Un message d'erreur apparaît :"Erreur d'incompatibilité"

Pourriez-vous m'aiguiller svp?

En vous remerciant par avance

Belle soirée

Bonsoir, traduction svp :

appliquer le code ? quel code quoi ?

sur quelle colonne ? ce n'est pas trés clair commen demande.

Bonsoir,

si j'ai compris :

Sub DateEx()
    ligne = 2
    ajout = Range("C2")

    Do While Range("E" & ligne) <> ""
        If Range("E" & ligne).Value <= Range("D" & ligne).Value then
            Range("E" & ligne).Value = DateAdd("m", ajout, Range("E" & ligne).Value)
        End If
        ligne = ligne + 1
        ajout = Range("C" & ligne)
    Loop

End Sub

Bonsoir Xmenpl Pas très clair non plus !

@ bientôt

LouReeD

Bonsoir Xmenpl,

Merci pour votre réponse et veuillez m'excuser pour ma maladresse

Ce que fait mon code:

Mettre à jour la "deadline actualisée" par rapport à la "deadline dénonciation".

La colonne reconduction est la variable qui permettra d'ajouter des mois à la colonne "deadline actualisée"

Actuellement, le code n'agit que sur la cellule E2, je souhaiterai que ce dernier d'applique sur les 3 colonnes, à savoir la reconduction, la deadline dénonciation et la deadline actualisée

Avez-vous besoin de + d'explications ?

Vous remerciant par avance pour votre aide

Bonsoir LouReeD,

Merci pour votre aide et veuillez m'excuser pour ma maladresse

Votre code marche très bien, je vous remercie . Néanmoins, il ne met pas à jour en un seul coup, bien qu'il y ait la présence de la boucle "Do while - Loop"

Merci pour votre retour

Bonsoir,

le code ajoute x mois à la date en colonne E si cette date est inférieur à la valeur de la colonne D où X correspond à la valeur en colonne C, mais il se peut que cet ajout fasse que "E" reste inférieur à "D", il faut donc en effet relancer le code.

Maintenant s'il faut s'assurer que "E" soit > ou = à "D" alors utiliser ce code ci :

Sub DateEx()
    ligne = 2
    ajout = Range("C2")

    Do While Range("E" & ligne) <> ""
        Do while Range("E" & ligne).Value < Range("D" & ligne).Value
            Range("E" & ligne).Value = DateAdd("m", ajout, Range("E" & ligne).Value)
        Loop
        ligne = ligne + 1
        ajout = Range("C" & ligne)
    Loop

End Sub

Première boucle pour la "descente" dans les lignes, deuxième boucle pour l'incrémentation en mois de la date "E" jusqu'à être égale ou supérieur à "D".
Je n'ai pas essayé ce dernier code, mais l'idée est là s'il faut faire quelques modifications.

@ bientôt

LouReeD

Re ,

Vous avez bien identifié

Merci pour le code, nous y arrivons, sauf qu'il ne s'applique pas à la première ligne de données et l'avant dernière

Pour la dernière partie de vos explications, comme je l'ai dit, la colonne reconduction sert à ajouter des mois (ici 1 an, voir plus)

Edit: Le code ne marche plus, je ne comprends pas pourquoi... Il s'opère uniquement sur certaines lignes et n'applique même plus la boucle sur ces lignes

Merci pour votre retour

Bonsoir,

je prend votre fichier du premier message, sous VBA je copie/colle mon code à la place du votre, voilà ce que j'ai avant de le lancer :

image

Maintenant je clique sur le bouton, voilà ce que j'ai :

image

Toutes les lignes "E" ont été modifiées jusqu'à arrivée à être supérieur ou égale à la colonne "D", non ?

@ bientôt

LouReeD

Bonsoir

Merci pour votre retour, vous y êtes presque

Comme je l'ai dit lors de mon dernier message. Les dates ne doivent pas être supérieures ou égales mais strictement supérieures.

Par exemple, le résultat de la ligne 2 doit être "29/11/2025" et non "29/11/2024"

De +, j'ai fait plusieurs tests en remettant les dates inférieures et à un moment donné le code ne fonctionnait plus.. Je ne sais pas s'il y a une limite ?

Merci encore à vous pour votre aide

L'arrêt est géré par la valeur en colonne E, si E vide alors stop, j'ai donc modifier le code pour tester "D".
J'ai également modifié le test en ajoutant le "=", voici le nouveau code :

Sub DateEx()
    ligne = 2
    ajout = Range("C2")
    Do
        Do While Range("E" & ligne).Value <= Range("D" & ligne).Value
            Range("E" & ligne).Value = DateAdd("m", ajout, Range("E" & ligne).Value)
        Loop
        ligne = ligne + 1
        ajout = Range("C" & ligne)
    Loop While Range("D" & ligne) <> ""

End Sub

@ bientôt

LouReeD

Re,

Votre code est bon, le soucis va se faire au niveau des mois des dates choisis...

Voici la phase 1 avec la colonne E non actualisée:

image

Voici la phase 2 actualisée:

image

Je recommence:

image

Résultat:

image

Nous remarquons :

La deadline 2 reste inchangée à chaque fois

Les données actualisées différent d'une actualisation à l'autre

Solution:

J'ai remplacé le C2 par la colonne C

    ajout = Range("C" & ligne)

Grâce à votre code que vous m'avez fourni et je vous en remercie, j'ai remplacé dans DateAdd, la colonne "E" par "D" et ça marche

Range("E" & ligne).Value = DateAdd("m", ajout, Range("D" & ligne).Value)

Merciii beaucoup encore une fois !!!

Je vous souhaite une agréable fin de semaine

Bonsoir,

ce que je ne comprend pas c'est que votre code à l'origine était :

Sub DateEx()

    ajout = Range("C2")
    Do While Range("E2").Value <= Range("D2").Value
        Range("E2").Value = DateAdd("m", ajout, Range("E2").Value)
    Loop

End Sub

Donc vous partiez de la date "E" avec un ajout d'un certain nombre de mois pour trouver une date supérieur à "D".
Du coup si "E" n'était pas supérieur à "D" il fallait alors qu'il y ait répétition de l'ajout jusqu'à ce que "E" soit supérieur à "D".

Avec votre modification de code en mettant "D" à la place de "E" en fait la boucle ne sert à rien car forcément si on prend "D" et qu'on ajoute "C" alors "E" sera forcément plus grand mais il n'y aura pas de relation entre la date de départ de "E" et les différents ajout de "C" à cette date.

Mais si cela vous convient... le code simplifié serait donc :

Sub DateEx()
    ligne = 2
    Do
        If Range("E" & ligne).Value <= Range("D" & ligne).Value Then Range("E" & ligne).Value = DateAdd("m", Range("C" & ligne), Range("D" & ligne).Value)
        ligne = ligne + 1
    Loop While Range("D" & ligne) <> ""
End Sub

où si la date en E est plus petite ou égale à D alors on ajoute la valeur de mois de "C" mais comme dans votre réponse il n'y a plus de lien "réel" avec la date d'origine en "E".

@ bientôt

LouReeD

Bonjour LouReeD,

Vous avez très bien résumé et expliqué la problématique

Je pense en effet qu'il est plus simple d'agir directement sur la 1ère deadline, nous aurons des dates jutes avec des calculs de reconduction corrects

Vous remerciant par avance pour votre bonté et votre aide,

Belle fin de semaine

Rechercher des sujets similaires à "appliquer code colonnes"