Boujour,
Je suis actuellement coincé sur un détail de l’appli vba que je développe et suis dans l’incapacité de trouver mon erreur via internet étant donné que je ne sais pas ce qu’il l’a provoque.
Explication :
J’ai deux feuilles construites exactement de la même façon (copie du tableau de la première feuille dans la deuxième), seule les valeurs des tableaux changent.
Parmi les colonnes que j’utilise dans la fonction qui ne fonctionne pas :
- B : format standard mais qui contient des dates
- I : format heure (pouvant être >24h)
- J : format standard contenant pour la ligne n la formule : =NO.SEMAINE(Bn)
- K : format nombre contenant pour la ligne n la formule : =SI(Jn-1=Jn;SI(In<>"";Kn-1+In;Kn-1);SI(In<>"";In;"00:00:00"))
Les lignes sont ordonnées par ordre croissant de date dans chaque feuilles
Dans la colonne J on a le numéro de la semaine de la ligne.
Dans la colonne K on a donc le cumul, ici, du temps de fonctionnement d’une machine, depuis le début de la semaine.
Une semaine pouvant être à cheval sur deux mois et mes feuilles représentant chacune le fonctionnement sur un mois, j’appellerais ici feuille1 la feuille du moi précédent celui de la feuille2.
L’idée dans ma fonction défaillante est qu’elle retourne le cumul du temps de fonctionnement de la dite machine pour une semaine donnée en paramètre.
Vous trouverez ci-joint ma partie du code qui génère une erreur.
J’ai préféré commenter mon code plutôt que de me lancer dans de trop longues explications. Rapidement mon problème se résume de cette façon : J'utilise un même bloc d'instruction pour traiter mes deux feuilles, celui ci fonctionne pour le première feuille mais génère une erreur pour la deuxième.
J’ai évidement testé d’autres façons de faire, sans succès, et commence à penser que l’erreur ne vient pas du code.
Toutes vos propositions de solution sont donc les bienvenues.
J’ai de bonne connaissance en programmation de manière générale mais je suis débutant en vba et ne connais donc pas toutes les fonctions/instructions de ce langage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 Function MaFonction(NumSemaine As Integer) As Double Dim dateDebut As Date Dim dateFin As Date Dim i As Integer Dim temp As Double Dim resu As Double 'je cherche mes date de debut et fin de semaine dateDebut = GetDateFinSemaine(NumSemaine) dateFin = GetDateDebSemaine(NumSemaine) resu = 0 temp = 0 If Month(dateDebut) = Month(dateFin) Then 'Je n'ai ici besoin que de feuille1 et ça fonctionne bien Worksheets("feuille1").Activate i = 2 While Range("J" & i - 1 & "").Value <> "" Or Range("J" & i - 1 & "").Value <> 0 'parcour des lignes de la feuille 'Si la ligne pointée a un numero de semaine supérieur de celui recherché ... (ou on est a la fin du tableau) If Range("J" & i & "").Value > NumSemaine Or Range("J" & i & "").Value = "" Or Range("J" & i & "").Value = 0 Then '... je prend la valeur de la colonne K (cumul du temps) de la ligne d'avant resu = Range("K" & i - 1 & "").Value End If i = i + 1 Wend ElseIf Month(dateMax) > Month(dateMin) Then 'J'ai ici besoin de mes deux feuilles et ca ne fonctionne pas pour feuille2 Worksheets("feuille1").Activate i = 2 While Range("J" & i - 1 & "").Value <> "" Or Range("J" & i - 1 & "").Value <> 0 If Range("J" & i & "").Value > NumSemaine Or Range("J" & i & "").Value = "" Or Range("J" & i & "").Value = 0 Then resu = Range("K" & i - 1 & "").Value End If i = i + 1 Wend 'Tous fonctionne jusqu'ici, resu prend la valeur voulu Worksheets("feuille2").Activate i = 2 While Range("J" & i - 1 & "").Value <> "" Or Range("J" & i - 1 & "").Value <> 0 If Range("J" & i & "").Value > NumSemaine Or Range("J" & i & "").Value = "" Or Range("J" & i & "").Value = 0 Then 'J'utilise les même test et instructions ... temp = Range("K" & i - 1 & "").Value '... mais ici que ça ne marche pas : erreur d'execution 13 incompatibilité de type End If i = i + 1 Wend resu = resu + temp Else resu = 1 'prévoir ici le chevauchement sur plusieurs années End If DifCompteurSemaineT3000 = resu * 60 * 24 End Function
Dans l’attente, je vous remercie par avance et vous souhaite une bonne journée.
PS : Je suis un nouvel utilisateur de ce forum et suis enclin à prendre en compte toutes remarques concernant mes façons de faire.
Tamaloo
Partager