Workbook_SheetBeforeDoubleClick ne fonctionne que partiellement et bug

Bonjour le forum,

J'ouvre un nouveau sujet : un membre du forum m'a fourni il y a quelques jours une procédure excellente qui fonctionne parfaitement sur un fichier test de quelques lignes, mais seulement partiellement sur un fichier réel de 2 500 lignes.

Le but de cette procédure est de masquer toutes les lignes d'un client s'il n'a aucune facture échue

Et de laisser visibles les clients qui ont au moins une échéance dépassée.(et dans ce cas laisser visibles toutes les factures de ce client)

La procédure marche très bien sur les 300 premières lignes, puis finit par une incompatibilité de type, et ne masque aucune ligne au-delà de la ligne 322, et je n'arrive pas à en comprendre la raison.

Je vous joins la procédure en question, et le fichier Excel, en vous remerciant de votre aide :

image

Michael

Bonjour

Ceci dans le module de la feuille fonctionne

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim iRow%, iOK%
'
If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
    Cancel = True
    For x = Range("B" & Rows.Count).End(xlUp).Row To 8 Step -1
      'For x = 3000 To 8 Step -1

        If Range("B" & x).Value <> "" Then
            iOK = 0
            iRow = Columns(2).Find(what:=Range("B" & x).Value, lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row
            For y = iRow To x
                If Range("E" & y).Value <> "" Then _
                    If CDate(Range("E" & y).Value) <= CDate([I3]) Then iOK = 1
            Next
            Rows(iRow & ":" & x).Hidden = IIf(iOK = 0, True, False)
            x = iRow
        End If
    Next
End If

End Sub

Supprimer le code du module ThisWorkbook

Bonjour Chris,

Merci de votre retour, mais si en effet je n'ai plus d'incompatibilité de type, la procédure ne masque pas les lignes comme prévu : voir par ex. les lignes 323, 326, 330,...alors qu'elle fonctionne bien sur les 300 premières lignes.

Par ailleurs j'avais mis la procédure dans le workbook parce que l'onglet "BALAGEE " n'est pas à la base dans la macro, mais créé par elle (par une copie venant d'un fichier extérieur mis en forme en amont)

Voyez-vous une explication ?

Merci en tout cas

Michael

re

Je n'ai pas détaillé le procédure mais est-il normal qu'un même nom de client existe dans plusieurs groupes :

exemple BRUNMKU GMB UGIB à partir de 319 et à partir de 550 mais avec numéro de tiers différent ?

Bien vu !

En effet il y a quelques doublons de noms, mais c'est normal (sites différents pour un même client)

Et le 1er doublon est sur la ligne 319, pile-là où la proc cesse de masquer les lignes !

Du coup comme les numéros de clients sont uniques, j'ai modifié la proc avec la colonne A, et cela fonctionne parfaitement ! Bravo

Mais j'aimerais comprendre pourquoi ces doublons bloquent la procédure ?

Merci encore Chris

RE

La procédure fonctionne par recherche, du coup en cherchant le client qu'il lit en ligne 550 et quelques il se retrouve propulsé en ligne 319

Si le tiers est unique il faudrait travailler à partir de la colonne A plutôt que B

...Par contre comme je le disais, cet onglet "BALAGEE" n'existe pas quand je lance ma macro. (il y a du code VBA en amont)

Comment faire pour créer une procédure Worksheet_BeforeDoubleClick dans 1 Sheet qui n'existe pas encore ?

Je peux créer un onglet BALAGEE vierge dès le début, mais peut-on faire autrement ?

Michael

RE

C'est la seule feuille d'un classeur contenant du code, donc il doit bien exister une feuille au départ....

J'ai une dernière question :

Dans le cours d'un code VBA avec d'autres instructions en amont, comment inviter l'utilisateur à faire un double-click sur une cellule donnée (et que cela enclenche la procédure Worksheet_BeforeDoubleClick)

Tout en lui demandant s'il veut le faire ou pas ?

Michael

Re

Très capilotracté comme approche

Pourqui ne pas lui demander tout simplement s'il veut déclencher ou pas et si oui le code se poursuit....

Justement, c'est la 1ère fois que j'utilise une procédure événementielle, donc je suis conscient que ma question peut paraître sotte...

Mais je ne sais pas comment (via un inputbox ?) lui demander d'activer le BeforeDoubleClick et donc cliquer sur une cellule donnée.

Je ne demande qu'à apprendre

Michael

RE

Dans ce cas on n'utilise pas le double clic : on déclenche la procédure qui doit donc être une procédure normale et non évènementielle

Donc on utilise

reponse = MsgBox("Voulez-vous...", vbYesNo)
If reponse = vbYes Then ....

pour savoir si oui ou non il faut déclencher

merci Chris

Rechercher des sujets similaires à "workbook sheetbeforedoubleclick fonctionne que partiellement bug"