Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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:

chinel

XLDnaute Impliqué
Hopla !

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




C'est censé faire quoi pour toi ?
Et que veux-tu dire plus précisément par "cela ne fonctionne pas" ???
Quand je mets la partie (code vert) avec mon code, cela me met des erreurs (débogage) et même fermeture de mon fichier excel
 

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é
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é

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
 

TooFatBoy

XLDnaute Barbatruc
Voui, j'avais bien compris déjà la première des quatre fois où tu l'as dit. No soucy.
Je suis d'accord avec toi : VBA, c'est pô simp !


Donc, en pas à pas, ça bifurque sur quelle instruction ?
 

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
 

TooFatBoy

XLDnaute Barbatruc
Il doit bien y avoir une instruction où ça bifurque, sinon la suite du code s'exécuterait !

Et donc, toujours pas de balise code=vb pour nous simplifier la lecture !?!


Je passe la main.
Si l'ami cp4 ou quelqu'un d'autre se sent capable.
@+
 

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é
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
907
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…