Integration calcul du nbr de jour ouvrés VBA [Résolu/Fermé]

Signaler
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
-
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
-
Bonjour,

J'essaie donc d'intégrer un calcul de jour ouvrés dans une routine VBA que certains ici m'ont permis de construire.

La voici :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Long
lig = Target.Row
If lig = 1 Then Exit Sub 'non actif sur ligne 1
ActiveSheet.Unprotect Password:="" 'password a remplir quand routine ok
Cells(lig, 12).Locked = Not (Application.CountA(Cells(lig, 1).Resize(1, 8)) = 8)
If Not Intersect(Target, Cells(lig, 2).Resize(1, 7)) Is Nothing Then
If Application.CountA(Cells(lig, 2).Resize(1, 7)) = 7 Then
Cells(lig, 1) = Now()
Else
Cells(lig, 1) = ""
End If
ElseIf Not Intersect(Target, Range("I" & lig)) Is Nothing Then
Cells(lig, 1).Resize(1, 11).Locked = (Cells(lig, 9) <> "")
Cells(lig, 11).FormulaR1C1 = "=NB.JOURS.OUVRES(RC[-6],RC[-4])"
Cells(lig, 10) = Now()
End If
ActiveSheet.Protect Password:="", DrawingObjects:=False, Contents:=True, Scenarios:=False 'password a remplir quand routine ok
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub


La macro en temps que telle fonctionne bien mais ...
depuis que j'ai inséré la ligne :
Cells(lig, 11).FormulaR1C1 = "=NB.JOURS.OUVRES(RC[-6],RC[-4])"
J'ai une erreur "1004" : erreur définie par l'application ou par l'objet
et la ligne : Cells(lig, 10) = Now() ne s'exécute plus.

Je dois oublier quelque chose, mais la .. je bloque. Auriez vous une idée ?

Merci d'avance !

2 réponses

Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
Je progresse dans mon dépannage et voici ou j'en suis :

J'ai donc la boucle :

ElseIf Not Intersect(Target, Range("I" & lig)) Is Nothing Then
Cells(lig, 1).Resize(1, 12).Locked = (Cells(lig, 9) <> "")
Cells(lig, 10) = Now()
Cells(lig, 11).FormulaR1C1 = "=NETWORKDAYS(RC[-6],RC[-4])"
End If

qui ne fonctionne pas.
mais si je fais :

ElseIf Not Intersect(Target, Range("I" & lig)) Is Nothing Then
Cells(lig, 1).Resize(1, 12).Locked = (Cells(lig, 9) <> "")
'Cells(lig, 10) = Now()
Cells(lig, 11).FormulaR1C1 = "=NETWORKDAYS(RC[-6],RC[-4])"
End If

la ligne 'Cells(lig, 10) = Now() étant commentée
La boucle s'exécute parfaitement et ne plante pas.
Si je fais :

ElseIf Not Intersect(Target, Range("I" & lig)) Is Nothing Then
Cells(lig, 1).Resize(1, 12).Locked = (Cells(lig, 9) <> "")
Cells(lig, 10) = Now()
'Cells(lig, 11).FormulaR1C1 = "=NETWORKDAYS(RC[-6],RC[-4])"
End If

la ligne 'Cells(lig, 11).FormulaR1C1 = "=NETWORKDAYS(RC[-6],RC[-4])" étant commentée
La aussi la boucle s'exécute sans problème.

Donc il doit y avoir une règle (que je cherche) :limitant le nombre d'action dans ce type de boucle ? commet peut on s'affranchir de cette limite ?

Merci d'avance
Messages postés
24110
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 juin 2021
6 807
Bonjour,

Il n'y a pas de limitation à l'intérieur d'une boucle.
Tu devrais être plus précis et donner les messages d'erreur.
Et encore mieux, déposer un fichier exemple sur cijoint.fr et coller ici le lien fourni
eric
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
Bonjour Eriic et merci de ta réponse.

Voici le lien vers l'exemple ... qui fonctionne sans que j'ai vraiment compris ce que j'ai modifié ... :)
http://www.cijoint.fr/cjlink.php?file=cj201007/cijXJPDQEF.xls
Messages postés
24110
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 juin 2021
6 807
Maintenant je résous par télépathie, ça va plus vite ;-)
eric
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
Ah ben oui, carrément ! :) merci de t'être penché sur le sujet en tout cas.comme tu peux le voir ta macro fonctionne très bien ! :)