Rapport de message :*
 

Re: Adapter le mDF_Calendar

Titre du sujet : Re: Adapter le mDF_Calendar
par myDearFriend! le 21/05/2008 22:08:22

Ok, merci pour avoir rectifier les fichiers et liens.

Autant pour moi, l'essai je l'avais bien fait dans mon post précédent, mais je l'avais fait sur XL2003, j'avais complètement zappé (et non zippé ) que tu parlais d' XL97 plus haut...

Je pense qu'il faut que tu apprennes à débugger un code Hadidman. Dans ta procédure, tu avais inclus un "On Error Resume Next", pourquoi ? Ben, parce qu'il y avait une erreur si tu l'enlevais... Ben voilà, c'est pas plus compliqué que ça ! Plutôt que de "colmater" la faille avec une gestion d'erreur, il est toujours préférable d'essayer déjà de voir pourquoi il y a erreur. Ca t'éviterait notamment de connaitre la situation dans laquelle tu te trouves maintenant, avec un code qui semble marcher, mais qui ne marche pas vraiment... Les gestionnaires d'erreur, c'est très utile, mais ça ne s'utilise pas à tout va comme ça..

Bon, si j'enlève le "On Error Resume Next", j'obtiens une erreur :
Elle s'arrête sur la ligne : "If D = Range("B" & i) Then" et elle dit : "Type incompatible"

Ca signifie quoi ? Ca signifie simplement que tu es en train de comparer des valeurs qui ne sont pas du même type. Dans le cas présent, dès le premier tour de ta boucle, tu vas comparer la variable D de type DATE avec une valeur "TECHNICIEN" de type STRING. Et ça, VBA, il ne supporte pas ! Ta boucle passe par des cellules qui ne contiennent pas de date, et c'est là le problème.

Pour y remédier, d'abord on commence la boucle à la ligne 7 (première date dans tes pages), puis on va parcourir les lignes du tableau en redescendant : ligne 7, ligne 14, ligne 21, etc... Il nous faut redescendre par pas de 7 jusqu'à la ligne 217 maximum.

Ta boucle devrait donc ressembler à ça :
For 7 To 217 Step 7
        
If Range("B" iThen
            Range
("B" i).Select
        End 
If
    
Next i

Maintenant, tu peux supprimer ton "On Error Resume Next" qui camoufle les problèmes, mais ne les règle pas et empêche même de les cerner.

Par ailleurs, un autre truc (et ce sera le dernier) :
Tu peux facilement optimiser la partie de code suivante :
Select Case mDFcalendrier.lblMois
        
Case "janvier"
            
Worksheets("JAN").Activate
        
Case "février"
            
Worksheets("FEV").Activate
        
Case "mars"
            
...

Tes feuilles Mois se suivent. Tu peux ainsi en profiter et te servir de l'index des feuilles plutot que de leur nom : Sheets(1) c'est JAN, Sheets(2) c'est FEV, Sheets(3) c'est MAR, etc...
A la place de tout ce Select Case et instructions Activate redondantes, tu peux faire simplement comme ça :
Sheets(Month(D)).Activate
D contient ta date, Month(D) contient le numéro du mois correspondant et Sheets(Month(D)).Activate activera donc la Nième feuille du classeur pour le mois N.

Ta procédure complète peut donc devenir :
Private Sub lblJGroup_Click()
Dim D As Date
Dim i 
As Byte
    D 
DateValue(lblJGroup.Caption " " mDFcalendrier.lblMois " " mDFcalendrier.lblAn)
    
Sheets(Month(D)).Activate
    
For 7 To 217 Step 1
        
If Range("B" iThen
            Range
("B" i).Select
        End 
If
    
Next i
End Sub


Voilà, je te laisse solder définitivement ce fil de discussions. Tu es évidemment toujours bienvenu et tu peux créer d'autres sujets si tu as besoin d'aide VBA ou Excel, mais celui-ci, pour moi, il est clos.

Cordialement,