Coda VBA pour ajouter une valeur sous conditions

Résolu/Fermé
Suki_BT Messages postés 9 Date d'inscription jeudi 28 avril 2016 Statut Membre Dernière intervention 15 février 2018 - Modifié par Suki_BT le 28/04/2016 à 14:49
 Suki_BT - 9 mai 2016 à 13:42
Bonjour,

J'ai fais une petite formation de Excel VBA Initiation mais je ne peux pas pratiquer souvent, j'ai besoin d'aide. Je cherche un code à insérer dans une macro qui traite les absences et je voudrais que pour chaque cellule dont la valeur est de "0.5" dans la colonne M la valeur +0.5 soit ajoutée à la cellule d'en-dessous sous 3 condition : Si les colonnes G et H soit identiques et que la date début (colonne J) soit = Date fin +1 jour.
Exemple (avec fichier ci-joint):
SI M11 =0.5 - oui va vérifier les cellules G12 et H12
SI G12 et H12 correspondent à G11 et H11 - oui ET
SI J12 = J11+1 jour - oui
ALORS M12+0,5

Pouvez-vous m'aider svp ?

Merci par avance
A voir également:

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
28 avril 2016 à 14:50
Bonjour,
Exemple (avec fichier ci-joint):

etilestoù?

Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci par un clic droit sur le lien proposé dans le message de réponse

Dans l’attente
0
Suki_BT Messages postés 9 Date d'inscription jeudi 28 avril 2016 Statut Membre Dernière intervention 15 février 2018
Modifié par Suki_BT le 28/04/2016 à 15:03
https://www.cjoint.com/c/FDCndg10NrD

Et merci Michel :) Je pensais l'avoir mis en pj.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > Suki_BT Messages postés 9 Date d'inscription jeudi 28 avril 2016 Statut Membre Dernière intervention 15 février 2018
28 avril 2016 à 17:14
OK, Merci

Je te fais ca demain matin
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
29 avril 2016 à 08:02
Bonjour

essaies ce code. si ma remarque ne te convient pas remplace K par J

Option Explicit
Const Jcal As Single = 0.5
'-----------------------------
Sub incrementer_jcal()
'SI M11 =0.5 - oui va vérifier les cellules G12 et H12
'SI G12 et H12 correspondent à G11 et H11 - oui ET
'SI J12 = J11+1 jour - oui 'REMARQUE (michel_m) J12=K11+1( car supérieur au dernier jour ???)
'ALORS M12 + 0, 5
Dim Nbre As Integer, Lig As Integer, CPtr As Integer

Application.ScreenUpdating = False 'fige le défileùent de l'écran: confort & rapidité
'nombre de jcal=0,5
Nbre = Application.CountIf(Columns("M"), Jcal)
If Nbre > 0 Then
'recherche lignes avec 0,5
Lig = 1
For CPtr = 1 To Nbre
Lig = Columns("M").Find(Jcal, Cells(Lig, "M"), xlValues).Row
'comparaison nom prénom sur 2 lignes
If Cells(Lig, "G") & Cells(Lig, "H") = Cells(Lig + 1, "G") & Cells(Lig + 1, "H") Then
'décalage de date >
If Cells(Lig + 1, "J") > Cells(Lig, "K") Then Cells(Lig + 1, "M") = Cells(Lig + 1, "M") + 0.5
End If
Next
End If
End Sub

0
Suki_BT Messages postés 9 Date d'inscription jeudi 28 avril 2016 Statut Membre Dernière intervention 15 février 2018
29 avril 2016 à 09:06
Merci Michel, je viens d'arriver au travail, je l'essaye dans la matinee matinée et je te dis :) Et encore une fois merci bcp.
0
Suki_BT Messages postés 9 Date d'inscription jeudi 28 avril 2016 Statut Membre Dernière intervention 15 février 2018
29 avril 2016 à 12:21
Michel,

Cela marche super bien, merci beaucoup.

J'ai essayé de rajouter une ligne dans le code pour supprimer la ligne de au-dessus, cela ne bugg pas mais supprime la ligne qui a été incrémentée. Qu'est ce que je fais de mal ? A la suite de la dernière ligne IF .... Then
'And Rows(Lig - 1).Delete

Bonne journée :)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > Suki_BT Messages postés 9 Date d'inscription jeudi 28 avril 2016 Statut Membre Dernière intervention 15 février 2018
29 avril 2016 à 13:44
'décalage de date >
If Cells(Lig + 1, "J") > Cells(Lig, "K") Then Cells(Lig + 1, "M") = Cells(Lig + 1, "M") + 0.5
Rows(Lig).Delete


mais un p'tit que je ne comprend pas
ton tableau semble cumulé les absences: pourquoi alors limiter l'incrémentation à 0,5 ?
par ex Benedetti cumule 4 lignes d'absences
0
Suki_BT Messages postés 9 Date d'inscription jeudi 28 avril 2016 Statut Membre Dernière intervention 15 février 2018
29 avril 2016 à 13:57
Bonjour Michel,

Parce que cela correspond aux périodes d'absence distingués. les demi lignes qui sont incrémentés à 0.5 sont des départs en milieu de journée que je dois rajouter car cela se suit.

Exemple VARIN :
Il est parti en milieu de journée 15/02 mais il a continué en maladie du 16/02 au 26/02.
Donc la 0.5 + 11 jours

BENEDETTI ce sont 4 périodes distingués.
0
Suki_BT Messages postés 9 Date d'inscription jeudi 28 avril 2016 Statut Membre Dernière intervention 15 février 2018
29 avril 2016 à 14:19
J'essayé le bout de code que tu m'as donnée et cela marché nickel.

Je pense que j'ai un peu de mal à comprendre la logique de déplacement dans la feuille. Je mettais le Rows(Lig - 1).Delete car je pensais qu'il fallait se déplacer en dessus pour supprimer la ligne.

Sa doit parce que je suis une femme et j'ai du mal avec les directions lol.

Merci bcp en tout cas, tu est super rapide et efficace :)
0