Des opérateurs... inopérants
Bonjour le forum!
Là, j'ai besoin d'un regard neuf pour éviter de m'arracher les cheveux!
Je suis en train de faire une pointeuse pour une de nos obligées mais...
Private Sub Workbook_Open()
'
Dim dDate1, dDate2 As Date
Dim iSem, iDay, iFlag As Integer
'
iSem = Format(Date, "ww", vbMonday, vbFirstFourDays) 'n° de semaine
iDay = Weekday(Date, vbMonday) 'n° du jour de semaine
'
With Worksheets("Pointeuse")
[color=#FF0000]If iSem <> .Cells(8, 1)[/color] Then 'si n° de semaine <> [A8]/////Là, je m'arrache les cheveux!!!! Marche pas!!!!!! Le code rentre!!!!
[color=#FF0000]iFlag = IIf(iSem > .Cells(8, 1), 8, 10)[/color] '////Marche pas non plus!!!!!!
.Range("A8:I" & iFlag).Insert shift:=xlDown
If iFlag = 10 Then .Cells(10, 1) = .Cells(7, 1)
.Cells(7, 1) = Year(Now) 'année en [A7]
.Cells(8, 1) = iSem 'n° de semaine en [A8]
.Cells(5, 3) = 0 'repère de pause en [C5]
.OLEObjects("cmdPointeuse").Object.Caption = "Pointeuse OFF"
.OLEObjects("cmdPointeuse").Object.ForeColor = RGB(200, 0, 0)
dDate1 = DateAdd("d", -(iDay - 1), Date)
dDate2 = DateAdd("d", 5 - iDay, Date)
.Cells(8, 2) = "du " & dDate1 & " au " & dDate2
End If
End With
'
End Sub
Ces deux
- If iSem <> .Cells(8, 1) compare le n° de semaine calculé avec celui affiché en [A8]. Il s'en f... et rentre dans le code même si la condition n'est pas rencontrée.
- iFlag = IIf(iSem > .Cells(8, 1), 8, 10) et son corollaire. iFlag doit me donner la profondeur d'un Insert! Mon œil, oui!
Tout ça se passe dans WorkBook_Open().
Ne pas faire attention aux imperfections d'affichage dû à ce... mystère! Pas eu le temps, forcément!
Ce serait sympa de me trouver le stûûût !
Merci de m'éclairer!
Bonne journée!
A+
Bonjour Curulis
Teste avec ceci
Private Sub Workbook_Open()
'
Dim dDate1, dDate2 As Date
Dim iSem, iDay, iFlag As Integer
'
iSem = CInt(Format(Date, "ww", vbMonday, vbFirstFourDays)) 'n° de semaine
iDay = Weekday(Date, vbMonday) 'n° du jour de semaine
'
With Worksheets("Pointeuse")
If iSem <> .Cells(8, 1) Then 'si n° de semaine <> [A8]/////Là, je m'arrache les cheveux!!!! Marche pas!!!!!! Le code rentre!!!!
iFlag = IIf(iSem > .Cells(8, 1), 8, 10) '////Marche pas non plus!!!!!!
.Range("A8:I" & iFlag).Insert shift:=xlDown
If iFlag = 10 Then .Cells(10, 1) = .Cells(7, 1)
.Cells(7, 1) = Year(Now) 'année en [A7]
.Cells(8, 1) = iSem 'n° de semaine en [A8]
.Cells(5, 3) = 0 'repère de pause en [C5]
.OLEObjects("cmdPointeuse").Object.Caption = "Pointeuse OFF"
.OLEObjects("cmdPointeuse").Object.ForeColor = RGB(200, 0, 0)
dDate1 = DateAdd("d", -(iDay - 1), Date)
dDate2 = DateAdd("d", 5 - iDay, Date)
.Cells(8, 2) = "du " & dDate1 & " au " & dDate2
End If
End With
'
End Sub
Bonjour,
Prends en compte que :
- dDate1, iSem, iDay ne sont pas typés (donc Variant)
- iSem = Format(... =>type de donnée iSem = String
- If iSem <> .Cells(8, 1)... => la condition est donc toujours vraie.
Cordialement.
Bonjour M12,
Gagné!
Jamais imaginé qu'il faille prendre une précaution pareille avec ce que je pensais être un Integer!
Tu peux expliquer en 2 mots? Je continuerai mes recherches après... ma nuit!
Je te remercie infiniment!
A+
Bonjour MFerrand,
merci pour tes conseils!
Je crois que je vais me pencher un peu plus sérieusement sur ces déclarations de variables!
J'aurais dû appeler vos lumières plus tôt! J'aurais passé une meilleure nuit!
Belle journée!
A+
Re,
Le fait de mettre CInt déclare ISem en integer
Quand tu déclares les variables
par ex:
Dim dDate1, dDate2 As Date
Dim iSem, iDay, iFlag As Integer 'dDate1, iSem et iDay ne sont pas déclarés
Dim dDate1 as Date, dDate2 As Date
Dim iSem%, iDay%, iFlag% '(% étant identique que Integer)
Jete un oeil sur cette page https://www.excel-pratique.com/fr/vba/variables.php