Coda VBA pour ajouter une valeur sous conditions

Résolu/Fermé
Messages postés
9
Date d'inscription
jeudi 28 avril 2016
Statut
Membre
Dernière intervention
15 février 2018
-
 Suki_BT -
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

2 réponses

Messages postés
16551
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 janvier 2022
3 262
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
Messages postés
9
Date d'inscription
jeudi 28 avril 2016
Statut
Membre
Dernière intervention
15 février 2018

https://www.cjoint.com/c/FDCndg10NrD

Et merci Michel :) Je pensais l'avoir mis en pj.
Messages postés
16551
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 janvier 2022
3 262 >
Messages postés
9
Date d'inscription
jeudi 28 avril 2016
Statut
Membre
Dernière intervention
15 février 2018

OK, Merci

Je te fais ca demain matin
Messages postés
16551
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 janvier 2022
3 262
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

Messages postés
9
Date d'inscription
jeudi 28 avril 2016
Statut
Membre
Dernière intervention
15 février 2018

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.
Messages postés
9
Date d'inscription
jeudi 28 avril 2016
Statut
Membre
Dernière intervention
15 février 2018

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 :)
Messages postés
16551
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 janvier 2022
3 262 >
Messages postés
9
Date d'inscription
jeudi 28 avril 2016
Statut
Membre
Dernière intervention
15 février 2018

'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
Messages postés
9
Date d'inscription
jeudi 28 avril 2016
Statut
Membre
Dernière intervention
15 février 2018

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.
Messages postés
9
Date d'inscription
jeudi 28 avril 2016
Statut
Membre
Dernière intervention
15 février 2018

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 :)