Coda VBA pour ajouter une valeur sous conditions [Résolu/Fermé]

Signaler
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
16174
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
11 août 2020
3 000
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
16174
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
11 août 2020
3 000 >
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
16174
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
11 août 2020
3 000
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

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

la macro marche super bien quand c'est le même mois, mais bugg dès qu'il y a d'autres mois :

http://www.cjoint.com/c/FEetEmZAfeR

Sub incrementer_jcal()
Const Jcal As Single = 0.5
'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
'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
Rows(Lig).Delete
End If
Next
End If
End Sub


Merci de votre aide :)
http://www.cjoint.com/doc/16_05/FEetEmZAfeR_COG-Exemples-MacroY.xlsx
Messages postés
16174
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
11 août 2020
3 000
Bonjour
1/ je n'ai plus le pb en tête
2/ je n'ai plus le classeur que je t'avais transmis car marqué résolu
3/ le classeur que tu m'envoies n'a pas les macros que je t'avais envoyé--> il faudrait que je fasse un copier coller mais de quel version ?

conclusion
je ne comprends pas ta question
Bonjour Michel,

C'est une tâche à effectuer mensuellement et par trimestre, semestre et année :
Incrémenter valeur sous conditions:
si même salarié et si la date de début est égale date de début + 1 jour

Pour le mensuel la macro marche super bien mais quand je le fais sur trois mois (où on trouve le même salarié avec plusieurs périodes différentes) la macro bugg et les cumule

Le résultat serait :
CHIN devrait rester pareil 2 lignes pas d'incrémentation
PIERRE devrait rester pareil 4 lignes pas d'incrémentation
DUPONT suppression 1 ligne 15/02, incrémentation de la ligne 16/02 au 26/02

http://www.cjoint.com/c/FEjlASv4niJ

Voici le lien avec la macro.

Merci pour ton aide.