XL 2019 soucis avec un code VBA pour les doublons

chinel

XLDnaute Impliqué
Bonjour tout le monde, j'ai mon code et j'ai déniché un autre code (en vert) que je désire intégrer dans le mien mais cela ne fonctionne pas, besoin d'aide merci

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

if Intersect(Target, [B:B,G:G]) Is Nothing Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
if Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
if Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
Target.Select
MsgBox "Cette personne est déjà affectée à une autre machine !", 48, "Doublon"
Target = ""
1 Application.EnableEvents = True 'réactive les évènements






If Range("A8") = "à l'arrêt" Then Range("B8,B10:B15,C8,C10:C15") = ""
If Range("A10") = "à l'arrêt" Then Range("B10") = ""
If Range("A11") = "à l'arrêt" Then Range("B11") = ""
If Range("A12") = "à l'arrêt" Then Range("B10:B15") = ""
If Range("A13") = "à l'arrêt" Then Range("B13") = ""
If Range("A14") = "à l'arrêt" Then Range("B14") = ""
If Range("A15") = "à l'arrêt" Then Range("B15") = ""

If Range("F8") = "à l'arrêt" Then Range("G8,G10:G15,h8,h10:h15") = ""
If Range("F10") = "à l'arrêt" Then Range("G10:G12") = ""
If Range("F11") = "à l'arrêt" Then Range("G11") = ""
If Range("F12") = "à l'arrêt" Then Range("G12") = ""
If Range("F13") = "à l'arrêt" Then Range("G13") = ""
If Range("F14") = "à l'arrêt" Then Range("G14") = ""
If Range("F15") = "à l'arrêt" Then Range("G15") = ""

If Range("A17") = "à l'arrêt" Then Range("B17,B19:B22,c17:c22") = ""
If Range("a19") = "à l'arrêt" Then Range("b19") = ""
If Range("a20") = "à l'arrêt" Then Range("b20") = ""
If Range("a21") = "à l'arrêt" Then Range("b21") = ""
If Range("a22") = "à l'arrêt" Then Range("b22") = ""

If Range("F17") = "à l'arrêt" Then Range("G17,G19:G23,h17,h19:h23") = ""
If Range("F19") = "à l'arrêt" Then Range("G19") = ""
If Range("F20") = "à l'arrêt" Then Range("G20") = ""
If Range("F21") = "à l'arrêt" Then Range("g21") = ""
If Range("F22") = "à l'arrêt" Then Range("g22") = ""
If Range("F23") = "à l'arrêt" Then Range("g23") = ""





If Range("A25") = "à l'arrêt" Then Range("B25,c25") = ""
If Range("A26") = "à l'arrêt" Then Range("B26,c26") = ""
If Range("A27") = "à l'arrêt" Then Range("B27,c27") = ""
If Range("A28") = "à l'arrêt" Then Range("B28,c28") = ""
If Range("A29") = "à l'arrêt" Then Range("B29,c29") = ""


Application.EnableEvents = True
End Sub
 

TooFatBoy

XLDnaute Barbatruc
Hopla !

Tu connais pô la balise code=vb ???
Tu me diras, c'est normal pour un petit nouveau, inscrit depuis seulement 2007. 🙃



j'ai mon code et j'ai déniché un autre code (en vert) que je désire intégrer dans le mien mais cela ne fonctionne pas
C'est censé faire quoi pour toi ?
Et que veux-tu dire plus précisément par "cela ne fonctionne pas" ???
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Donc ton code vert est celui-ci :
VB:
    if Intersect(Target, [B:B,G:G]) Is Nothing Then Exit Sub

    Application.EnableEvents = False    ' Désactive les événements

    if Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
    if Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
    Target.Select
    MsgBox "Cette personne est déjà affectée à une autre machine !", 48, "Doublon"
    Target = ""

1:
    Application.EnableEvents = True    ' Réactive les événements

1- Ca plante où, et dans quelles circonstances ???
C'est sur le UNDO que ça plante ? Si oui, est-ce que ta feuille est bien déprotégée ?

2- Tu veux que ça fasse quoi ?
 

chinel

XLDnaute Impliqué
Donc ton code vert est celui-ci :
VB:
    if Intersect(Target, [B:B,G:G]) Is Nothing Then Exit Sub

    Application.EnableEvents = False    ' Désactive les événements

    if Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
    if Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
    Target.Select
    MsgBox "Cette personne est déjà affectée à une autre machine !", 48, "Doublon"
    Target = ""

1:
    Application.EnableEvents = True    ' Réactive les événements

1- Ca plante où, et dans quelles circonstances ???
C'est sur le UNDO que ça plante ? Si oui, est-ce que ta feuille est bien déprotégée ?

2- Tu veux que ça fasse quoi ?
oui c'est bien le code que je veux intrégrer mais cela désactive le reste du code, pourquoi ? je n'en sais rien 🤔
 

chinel

XLDnaute Impliqué
Ben exécute en pas à pas et regarde où ça bifurque. ;)
j'ai testé le code sans avoir ajouter l'autre partie (en vert) et cela fonctionne bien mais quand je remets le code en vert (pour les doublons) l'autre partie est désactivée. VBA c'est quand même compliqué :rolleyes:

Ce bout de code est fait pour éviter les doublons dans ma feuille "Planning"

if Intersect(Target, [B:B,G:G]) Is Nothing Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
if Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
if Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
Target.Select
MsgBox "Cette personne est déjà affectée à une autre machine !", 48, "Doublon"
Target = ""
1 Application.EnableEvents = True 'réactive les évènements
 

chinel

XLDnaute Impliqué
Voui, j'avais bien compris déjà la première des quatre fois où tu l'as dit. No soucy. ;)

Donc, en pas à pas, ça bifurque sur quelle instruction ?
Aucune !!!!!!!! Sauf que l'autre partie du code ne fonctionne plus !!!! voici l'autre partie:

If Range("A8") = "à l'arrêt" Then Range("B8,B10:B15,C8,C10:C15") = ""
If Range("A10") = "à l'arrêt" Then Range("B10") = ""
If Range("A11") = "à l'arrêt" Then Range("B11") = ""
If Range("A12") = "à l'arrêt" Then Range("B10:B15") = ""
If Range("A13") = "à l'arrêt" Then Range("B13") = ""
If Range("A14") = "à l'arrêt" Then Range("B14") = ""
If Range("A15") = "à l'arrêt" Then Range("B15") = ""

If Range("F8") = "à l'arrêt" Then Range("G8,G10:G15,h8,h10:h15") = ""
If Range("F10") = "à l'arrêt" Then Range("G10:G12") = ""
If Range("F11") = "à l'arrêt" Then Range("G11") = ""
If Range("F12") = "à l'arrêt" Then Range("G12") = ""
If Range("F13") = "à l'arrêt" Then Range("G13") = ""
If Range("F14") = "à l'arrêt" Then Range("G14") = ""
If Range("F15") = "à l'arrêt" Then Range("G15") = ""

If Range("A17") = "à l'arrêt" Then Range("B17,B19:B22,c17:c22") = ""
If Range("a19") = "à l'arrêt" Then Range("b19") = ""
If Range("a20") = "à l'arrêt" Then Range("b20") = ""
If Range("a21") = "à l'arrêt" Then Range("b21") = ""
If Range("a22") = "à l'arrêt" Then Range("b22") = ""

If Range("F17") = "à l'arrêt" Then Range("G17,G19:G23,h17,h19:h23") = ""
If Range("F19") = "à l'arrêt" Then Range("G19") = ""
If Range("F20") = "à l'arrêt" Then Range("G20") = ""
If Range("F21") = "à l'arrêt" Then Range("g21") = ""
If Range("F22") = "à l'arrêt" Then Range("g22") = ""
If Range("F23") = "à l'arrêt" Then Range("g23") = ""





If Range("A25") = "à l'arrêt" Then Range("B25,c25") = ""
If Range("A26") = "à l'arrêt" Then Range("B26,c26") = ""
If Range("A27") = "à l'arrêt" Then Range("B27,c27") = ""
If Range("A28") = "à l'arrêt" Then Range("B28,c28") = ""
If Range("A29") = "à l'arrêt" Then Range("B29,c29") = ""


Application.EnableEvents = True
 

chinel

XLDnaute Impliqué
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

if Intersect(Target, [B:B,G:G]) Is Nothing Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
if Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
if Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
Target.Select
MsgBox "Cette personne est déjà affectée à une autre machine !", 48, "Doublon"
Target = ""
1 Application.EnableEvents = True 'réactive les évènements





If Range("A8") = "à l'arrêt" Then Range("B8,B10:B15,C8,C10:C15") = ""
If Range("A10") = "à l'arrêt" Then Range("B10") = ""
If Range("A11") = "à l'arrêt" Then Range("B11") = ""
If Range("A12") = "à l'arrêt" Then Range("B10:B15") = ""
If Range("A13") = "à l'arrêt" Then Range("B13") = ""
If Range("A14") = "à l'arrêt" Then Range("B14") = ""
If Range("A15") = "à l'arrêt" Then Range("B15") = ""

If Range("F8") = "à l'arrêt" Then Range("G8,G10:G15,h8,h10:h15") = ""
If Range("F10") = "à l'arrêt" Then Range("G10:G12") = ""
If Range("F11") = "à l'arrêt" Then Range("G11") = ""
If Range("F12") = "à l'arrêt" Then Range("G12") = ""
If Range("F13") = "à l'arrêt" Then Range("G13") = ""
If Range("F14") = "à l'arrêt" Then Range("G14") = ""
If Range("F15") = "à l'arrêt" Then Range("G15") = ""

If Range("A17") = "à l'arrêt" Then Range("B17,B19:B22,c17:c22") = ""
If Range("a19") = "à l'arrêt" Then Range("b19") = ""
If Range("a20") = "à l'arrêt" Then Range("b20") = ""
If Range("a21") = "à l'arrêt" Then Range("b21") = ""
If Range("a22") = "à l'arrêt" Then Range("b22") = ""

If Range("F17") = "à l'arrêt" Then Range("G17,G19:G23,h17,h19:h23") = ""
If Range("F19") = "à l'arrêt" Then Range("G19") = ""
If Range("F20") = "à l'arrêt" Then Range("G20") = ""
If Range("F21") = "à l'arrêt" Then Range("g21") = ""
If Range("F22") = "à l'arrêt" Then Range("g22") = ""
If Range("F23") = "à l'arrêt" Then Range("g23") = ""





If Range("A25") = "à l'arrêt" Then Range("B25,c25") = ""
If Range("A26") = "à l'arrêt" Then Range("B26,c26") = ""
If Range("A27") = "à l'arrêt" Then Range("B27,c27") = ""
If Range("A28") = "à l'arrêt" Then Range("B28,c28") = ""
If Range("A29") = "à l'arrêt" Then Range("B29,c29") = ""


Application.EnableEvents = True
End Sub
 

cp4

XLDnaute Barbatruc
Bonjour @TooFatBoy ;) , @chinel :),

@chinel : Je constate que tu nous tournes en bourrique. Tu travailles sur différents fichiers. Je t'ai conseillé de prendre celui de TooFatBoy qui est bien conçu (surtout pour la pérennité des données). Sur ce dernier, tu aurais pu intégrer le feuille Recap et le code.

Le code que tu as ajouté fonctionne bien, enfin le code corrigé par TooFatBoy. En effet,tel que tu as recopié le code, il aurait dû planté. Car il y a GoTo 1 qui est une étiquette qui devrait être plus bas dans le code suivi de ':' ) deux points. C'est à dire 1:, toi tu as mis ceci "1 Application.EnableEvents = True" 'réactive les évènements. Il fallait mettre deux points après le 1 et supprimer Application.EnableEvents = True, car cette instruction est en fin de procédure.
Voici le code complet qui fonctionne parfaitement

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B:B,G:G]) Is Nothing Then Exit Sub

    Application.EnableEvents = False    ' Désactive les événements

    If Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
    If Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
    Target.Select
    MsgBox "Cette personne est déjà affectée à une autre machine !", 48, "Doublon"
    Target = ""
1:

If Range("A8") = "à l'arrêt" Then Range("B8,B10:B15,C8,C10:C15") = ""
If Range("A10") = "à l'arrêt" Then Range("B10") = ""
If Range("A11") = "à l'arrêt" Then Range("B11") = ""
If Range("A12") = "à l'arrêt" Then Range("B10:B15") = ""
If Range("A13") = "à l'arrêt" Then Range("B13") = ""
If Range("A14") = "à l'arrêt" Then Range("B14") = ""
If Range("A15") = "à l'arrêt" Then Range("B15") = ""

If Range("F8") = "à l'arrêt" Then Range("G8,G10:G15,h8,h10:h15") = ""
If Range("F10") = "à l'arrêt" Then Range("G10:G12") = ""
If Range("F11") = "à l'arrêt" Then Range("G11") = ""
If Range("F12") = "à l'arrêt" Then Range("G12") = ""
If Range("F13") = "à l'arrêt" Then Range("G13") = ""
If Range("F14") = "à l'arrêt" Then Range("G14") = ""
If Range("F15") = "à l'arrêt" Then Range("G15") = ""

If Range("A17") = "à l'arrêt" Then Range("B17,B19:B22,c17:c22") = ""
If Range("a19") = "à l'arrêt" Then Range("b19") = ""
If Range("a20") = "à l'arrêt" Then Range("b20") = ""
If Range("a21") = "à l'arrêt" Then Range("b21") = ""
If Range("a22") = "à l'arrêt" Then Range("b22") = ""

If Range("F17") = "à l'arrêt" Then Range("G17,G19:G23,h17,h19:h23") = ""
If Range("F19") = "à l'arrêt" Then Range("G19") = ""
If Range("F20") = "à l'arrêt" Then Range("G20") = ""
If Range("F21") = "à l'arrêt" Then Range("g21") = ""
If Range("F22") = "à l'arrêt" Then Range("g22") = ""
If Range("F23") = "à l'arrêt" Then Range("g23") = ""

If Range("A25") = "à l'arrêt" Then Range("B25,c25") = ""
If Range("A26") = "à l'arrêt" Then Range("B26,c26") = ""
If Range("A27") = "à l'arrêt" Then Range("B27,c27") = ""
If Range("A28") = "à l'arrêt" Then Range("B28,c28") = ""
If Range("A29") = "à l'arrêt" Then Range("B29,c29") = ""

Application.EnableEvents = True
End Sub
 
Dernière édition:

chinel

XLDnaute Impliqué
Bonjour @TooFatBoy ;) , @chinel :),

@chinel : Je constate que tu nous tournes en bourrique. Tu travailles sur différents fichiers. Je t'ai conseillé de prendre celui de TooFatBoy qui est bien conçu (surtout pour la pérennité des données). Sur ce dernier, tu aurais pu intégrer le feuille Recap et le code.

Le code que tu as ajouté fonctionne bien, enfin le code corrigé par TooFatBoy. En effet,tel que tu as recopié le code, il aurait dû planté. Car il y a GoTo 1 qui est une étiquette qui devrait être plus bas dans le code suivi de :)) deux points. C'est à dire 1:, toi tu as mis ceci 1 Application.EnableEvents = True 'réactive les évènements. Il fallait mettre deux points après le 1 et supprimer Application.EnableEvents = True, car cette instruction est en fin de procédure.
Voici le code complet qui fonctionne parfaitement

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B:B,G:G]) Is Nothing Then Exit Sub

    Application.EnableEvents = False    ' Désactive les événements

    If Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
    If Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
    Target.Select
    MsgBox "Cette personne est déjà affectée à une autre machine !", 48, "Doublon"
    Target = ""
1:

If Range("A8") = "à l'arrêt" Then Range("B8,B10:B15,C8,C10:C15") = ""
If Range("A10") = "à l'arrêt" Then Range("B10") = ""
If Range("A11") = "à l'arrêt" Then Range("B11") = ""
If Range("A12") = "à l'arrêt" Then Range("B10:B15") = ""
If Range("A13") = "à l'arrêt" Then Range("B13") = ""
If Range("A14") = "à l'arrêt" Then Range("B14") = ""
If Range("A15") = "à l'arrêt" Then Range("B15") = ""

If Range("F8") = "à l'arrêt" Then Range("G8,G10:G15,h8,h10:h15") = ""
If Range("F10") = "à l'arrêt" Then Range("G10:G12") = ""
If Range("F11") = "à l'arrêt" Then Range("G11") = ""
If Range("F12") = "à l'arrêt" Then Range("G12") = ""
If Range("F13") = "à l'arrêt" Then Range("G13") = ""
If Range("F14") = "à l'arrêt" Then Range("G14") = ""
If Range("F15") = "à l'arrêt" Then Range("G15") = ""

If Range("A17") = "à l'arrêt" Then Range("B17,B19:B22,c17:c22") = ""
If Range("a19") = "à l'arrêt" Then Range("b19") = ""
If Range("a20") = "à l'arrêt" Then Range("b20") = ""
If Range("a21") = "à l'arrêt" Then Range("b21") = ""
If Range("a22") = "à l'arrêt" Then Range("b22") = ""

If Range("F17") = "à l'arrêt" Then Range("G17,G19:G23,h17,h19:h23") = ""
If Range("F19") = "à l'arrêt" Then Range("G19") = ""
If Range("F20") = "à l'arrêt" Then Range("G20") = ""
If Range("F21") = "à l'arrêt" Then Range("g21") = ""
If Range("F22") = "à l'arrêt" Then Range("g22") = ""
If Range("F23") = "à l'arrêt" Then Range("g23") = ""

If Range("A25") = "à l'arrêt" Then Range("B25,c25") = ""
If Range("A26") = "à l'arrêt" Then Range("B26,c26") = ""
If Range("A27") = "à l'arrêt" Then Range("B27,c27") = ""
If Range("A28") = "à l'arrêt" Then Range("B28,c28") = ""
If Range("A29") = "à l'arrêt" Then Range("B29,c29") = ""

Application.EnableEvents = True
End Sub
Merci @cp4 et bonne journée
 

cp4

XLDnaute Barbatruc
@cp4 petite question:

dans mon code, j'ai ceci et plusieurs fois
If Range("A8") = "à l'arrêt" Then Range("B8,B10:B15,C8,C10:C15") = ""
Mais cela ne fonctionne pas, pourquoi ? Aucunes cellules se vident
@chinel : Comme je te l'ai déjà dit, si tu utilises un autre fichier que le mien et que tu n'expliques pas la ou les manipulations que tu fais. Il m'est impossible de t'aider. Car je dois reproduire, ce que tu as fait et suivre le fonctionnement du code.
C'est ce que tu devrais faire, exécution du code pas à pas en utilisant la touche F8.

edit: joint ton fichier réel
 
Dernière édition:

Discussions similaires

Réponses
32
Affichages
906

Membres actuellement en ligne

Statistiques des forums

Discussions
314 771
Messages
2 112 768
Membres
111 653
dernier inscrit
Vanie0082