Des opérateurs... inopérants

Bonjour le forum!

Là, j'ai besoin d'un regard neuf pour éviter de m'arracher les cheveux! Je ne vois plus clair sans doute!

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 scrogneugneu me font n'importe quoi en refusant obstinément d'opérer dans la logique des choses.

  • 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+

17pointeuse.xlsm (27.16 Ko)

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é! Avec Int, ça marche aussi!

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

Rechercher des sujets similaires à "operateurs inoperants"