Copier coller une date en ajoutant des jours avec conditions

Résolu/Fermé
laricci Messages postés 19 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 17 juin 2013 - 12 juin 2013 à 14:48
laricci Messages postés 19 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 17 juin 2013 - 17 juin 2013 à 11:00
Bonjour tout le monde,

je suis face à un petit souci sous excel, j'ai une date dans une cellule de type texte que je dois copier et coller dans une autre cellule en la rendant en type personnalisé dd/mm/aaaa hh:mm pour ajouter un certain nombre de jours en fonction de la valeur d'une autre cellule.
J'ai déjà fait la partie copier coller en changeant le type, mais il me faut maintenant conditionner l'ajout de X jours en fonction des valeurs présentes dans la colonne a.
Est ce que quelqu'un a une idée pour résoudre ce problème.
Voila ma macro pour avoir une idée. Ce que je veux c'est que si la valeur dans la cellule A2 par exemple égal à "facile", cela rajoute 2 jours à la date collée sur B2 et si A3 = "moyen" cela rajoute 5 jours...
Merci d'avance de votre aide. je reste dispo pour plus d'infos.
Cordialement

Sub DateTime()
'
' DateTime Macro
'

'
Dim date_recep As Date
Dim date_theo As Date
Dim heure_recep As Date


With Sheets("Feuil1")


Range("class_c").Select
Selection.Copy

Range("class_b").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.NumberFormat = "dd/mm/yyyy hh:mm"
date_recep = Format(Range("class_c"), "dd/mm/yyyy")
date_theo = date_recep + 2
heure_recep = Right(Range("class_c"), 8)

Range("class_b").Select
Range("class_b") = date_theo & " " & heure_recep
End With

End Sub
A voir également:

4 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
12 juin 2013 à 23:05
Bonjour,

fais plutôt qcq chose dans ce genre :
if [A2] = "facile" then
Range("class_b")=Range("class_c")+2
elseif [A2] = "moyen" then
Range("class_b")=Range("class_c")+5
....
endif

Comme tu parles de date dans une cellule de type texte il y aurau peut-être des conversions à faire mais sans fichier exemple...

eric
0
laricci Messages postés 19 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 17 juin 2013
13 juin 2013 à 11:33
Bonjour Eric,

J'ai essayé de faire comme tu as dis, cela fonctionne parfaitement si je le fais pour chaque cellule à part mais quand je le fais pour toute la plage de cellule ça ne fonctionne pas.

Merci beaucoup pour ton aide, j'ai mis un exemple sur https://www.cjoint.com/?3Fnlqgkr08q
Si tu peux y jeter un coup d'oeil et me dire qu'est ce qui ne va pas, ça serait super ;)

Chaque colonne contient une plage de cellule nommée comme suit : Colonne A (class_a) Colonne B (class_b) Colonne C (class_c)
class_c contient les dates initiales et class_b les dates de class_c + X jours en fonction de class_a.

Merci d'avance et bonne journée

Cordialement
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié par eriiic le 13/06/2013 à 12:02
Bonjour,

je vois que tu as voulu utiliser l'évènement Change.
Tu veux recalculer C si A ou B change ? Dans ce cas c'est cellule par cellule ou il peut y avoir des collés de plusieurs cellules ?
Ou bien traiter toute la table en une fois ?
Les deux ?

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
laricci Messages postés 19 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 17 juin 2013
13 juin 2013 à 12:16
Bonjour,

C'est plutôt traiter toute la table en une fois, la valeur de A ne change pas mais si on rajoute des lignes ça doit être pris en considération.
Aussi j'aimerai bien que cela soit fait sans cliquer sur le bouton.

Je te remercie pour ta réactivité.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
13 juin 2013 à 12:48
dans Feuil1 :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 1 Then calcHeure
End Sub

Private Sub Worksheet_Deactivate()
    calcHeure
End Sub

Sub calcHeure()
    Dim derlig As Long, lig As Long, data As Variant
    derlig = Cells(Rows.Count, "A").End(xlUp).Row
    data = [A2].Resize(derlig, 3)
    For lig = 1 To UBound(data)
        Select Case data(lig, 1)
        Case "P2"
            data(lig, 3) = data(lig, 2) + 2
        Case "P3"
            data(lig, 3) = data(lig, 2) + 8
        Case "P4"
            data(lig, 3) = data(lig, 2) + 20
        End Select
    Next lig
    [A2].Resize(UBound(data), UBound(data, 2)) = data
End Sub

Recalculé si tu actives une autre feuille ou par un double-clic en colonne A pour éviter de ralentir à chaque saisie.
Pense à recalculer avant de sauvegarder sinon tu auras oublié à la prochaine ouverture que ce n'est pas fait.

eric
0
laricci Messages postés 19 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 17 juin 2013
13 juin 2013 à 14:35
Bonjour,

Je tiens à te remercier cela fonctionne à merveille,
j'ai une autre petite question, j'ai une autre valeur qui peut venir sur la colonne A, c'est "P1" mais je veux que ça rajoute 4h,et je ne connais pas la syntaxe pour ajouter les heures.
Genre je dois rajouter:
Case "P1"
data(lig, 3) = data(lig, 2) + ?
Et s'il te plait est ce que le fait de double cliquer sur la cellule est un choix ou bien c'est difficile de le rendre simultané?

Merci bcp pour ton aide

Cordialement
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié par eriiic le 13/06/2013 à 15:42
est ce que le fait de double cliquer sur la cellule est un choix ou bien c'est difficile de le rendre simultané?
Oui c'était un choix pour ne pas tout recalculer à chaque saisie.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 3 Then
Application.EnableEvents = False
calcHeure
Application.EnableEvents = True
End If
End Sub

Si tu vois qu'il y a trop de lenteurs tu enlèveras.

Ajoute aussi en dernier Case :
Case Else
    data(lig, 3) = data(lig, 3)
pour restaurer la date si la saisie dans A n'est pas connue.

eric

edit: dans le Worksheet_Change on peut ne recalculer que la ligne concernée, mais comme j'étais parti sur calculer l'ensemble suite à ta réponse au post 4 j'ai un peu zappé.
Mais là je m'absente, ça sera plus tard ou qcq'un d'autre.
erix
0
laricci Messages postés 19 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 17 juin 2013
13 juin 2013 à 17:06
Bonjour,
J'espère ne pas trop te déranger avec mes questions, c'est très gentil de ta part le fait de m'avoir montré tout cela.
Je voudrai savoir si c'est possible de faire ces ajouts de jours mais en sautant les week end et jours fériés exemple. Genre, si j'ai le 21/06/2013 dans une P2 cela passe au 25/06/2013 et non pas au 23/06/2013 par exemple. Je sais que c'est trop demander mais même un avis ou un conseil serait le bienvenu, je bloque sur ce truc depuis un bon bout de temps.

Merci d'avance
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
15 juin 2013 à 01:02
Bonjour,

ce n'est plus du tout le même problème.
J'ai fait la modif mais c'est beaucoup trop lent à mon goût.
Je vois pour faire autrement, patiente jusqu'à la semaine prochaine.
eric
0