Integration calcul du nbr de jour ouvrés VBA

Résolu
Eaheru Messages postés 205 Statut Membre -  
Eaheru Messages postés 205 Statut Membre -
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

  1. Eaheru Messages postés 205 Statut Membre 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
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
      0
  2. Eaheru Messages postés 205 Statut Membre 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
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Maintenant je résous par télépathie, ça va plus vite ;-)
      eric
      0
    2. Eaheru Messages postés 205 Statut Membre 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 ! :)
      0