Erreur 50290la méthode intersect de l'objet global a échoué

gr12sable

XLDnaute Nouveau
Bonjour,

Je suis à la recherche d'info sur la fonction intersect...

J'essaie de l'utiliser et j'ai de temps à autre une erreur de type 50290 la méthode de l'objet global a échoué.
Je l'ai placé dans le woorksheet_change, pour lancer quelques routine à chaque fois qu'on modifie une valeur dans une plage de cellule.


Démarche :
J'ai une liste de personne a attribué à une machine (pas de doublons possible)
Je peux soit choisir les personnes par liste déroulantes soit les saisir à la mains..
C'est quand je les choisi dans la liste que ca merdouille, ca ne merdoullé pas avant la macro de "surveillance"
 

Pièces jointes

  • plan test.xlsm
    39.8 KB · Affichages: 81
Dernière édition:

gr12sable

XLDnaute Nouveau
Re : Erreur 50290 la méthode intersect de l'objet global a échoué

Le code

Private Sub Worksheet_change(ByVal Target As Excel.Range)

Dim Colonne As Integer
Dim Adresse As String
Dim Rg As Range
Dim Rg2 As Range
Dim Rg3 As Range
Dim rngTrouve As Range
Dim strChaine As String


If Not Intersect(Target, Range("test2")) Is Nothing Then 'surveiller modif que sur zone définie

If Len(Target.Value) <> "" Then

'*************************
'* Ecriture en majuscule *
'*************************

Set Rg = Application.Intersect(Target, Columns(2))
If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each c In Rg
c.Value = UCase(c)
Next
Application.EnableEvents = True
End If


Set Rg2 = Application.Intersect(Target, Columns(3))
If Not Rg2 Is Nothing Then
Application.EnableEvents = False
For Each c In Rg2
c.Value = UCase(c)
Next
Application.EnableEvents = True
End If


Set Rg3 = Application.Intersect(Target, Columns(4))
If Not Rg3 Is Nothing Then
Application.EnableEvents = False
For Each c In Rg3
c.Value = UCase(c)
Next
Application.EnableEvents = True
End If

'**********************
'* Recherche doublons *
'**********************

If Target.Column = 2 Then
If Application.WorksheetFunction.CountIf(Range("B4:D27"), Target.Value) > 1 Then
Adresse = Columns(2).Find(what:=Target.Value, After:=Target.Offset(1, 0), lookat:=xlWhole, _
SearchDirection:=xlNext).Address
If MsgBox("L'opérateur ' " & Target & " ' est déjà occupé sur un autre poste de charge." & Chr(10) & "Utilisation en " & Adresse & Chr(10) & Chr(10) & " Le supprimer ?", vbYesNo + vbCritical, "Doublons") = vbYes Then
Target.Value = ""
Else
MsgBox "Doublon conservé", vbExclamation
End If
End If
End If


If Target.Column = 3 Then
If Application.WorksheetFunction.CountIf(Range("B4:D27"), Target.Value) > 1 Then
Adresse = Columns(3).Find(what:=Target.Value, After:=Target.Offset(1, 0), lookat:=xlWhole, _
SearchDirection:=xlNext).Address
If MsgBox("L'opérateur ' " & Target & " ' est déjà occupé sur un autre poste de charge." & Chr(10) & "Utilisation en " & Adresse & Chr(10) & Chr(10) & " Le supprimer ?", vbYesNo + vbCritical, "Doublons") = vbYes Then
Target.Value = ""
Else
MsgBox "Doublon conservé", vbExclamation
End If
End If

End If

If Target.Column = 4 Then
If Application.WorksheetFunction.CountIf(Range("B4:D27"), Target.Value) > 1 Then
Adresse = Columns(4).Find(what:=Target.Value, After:=Target.Offset(1, 0), lookat:=xlWhole, _
SearchDirection:=xlNext).Address
If MsgBox("L'opérateur ' " & Target & " ' est déjà occupé sur un autre poste de charge." & Chr(10) & "Utilisation en " & Adresse & Chr(10) & Chr(10) & " Le supprimer ?", vbYesNo + vbCritical, "Doublons") = vbYes Then
Target.Value = ""
Else
MsgBox "Doublon conservé", vbExclamation
End If
End If
End If

''*****************************************
''* Recherche valeur existante dans liste *
''*****************************************

strChaine = Target.Value
Set rngTrouve = Sheets("Liste").Columns(1).Cells.Find(what:=strChaine, lookat:=xlWhole)

If rngTrouve Is Nothing Then
MsgBox "Opérateur non enregistré", vbCritical, "Choix Impossible"
Target.Value = ""
End If



End If

End If

End Sub
 

ROGER2327

XLDnaute Barbatruc
Re : Erreur 50290la méthode intersect de l'objet global a échoué

Re...
Je ne vois pas d'où vient l'erreur avec Intersect. Par contre, Range("B4:D2 7") n'est pas correct, ni Find(what:=strCha ine, lookat:=xlWhole)

En réécrivant le code ainsi :
VB:
Private Sub Worksheet_change(ByVal Target As Excel.Range)
Dim Colonne As Integer
Dim Adresse As String
Dim Rg As Range
Dim Rg2 As Range
Dim Rg3 As Range
Dim rngTrouve As Range
Dim strChaine As String
Dim c As Range ' Déclaration manquante

  If Not Intersect(Target, Range("test2")) Is Nothing Then 'surveiller modif que sur zone définie

    If Len(Target.Value) <> "" Then

'*************************
'* Ecriture en majuscule *
'*************************

      Set Rg = Application.Intersect(Target, Columns(2))
      If Not Rg Is Nothing Then
        Application.EnableEvents = False
        For Each c In Rg
          c.Value = UCase(c)
        Next
        Application.EnableEvents = True
      End If

      Set Rg2 = Application.Intersect(Target, Columns(3))
      If Not Rg2 Is Nothing Then
        Application.EnableEvents = False
        For Each c In Rg2
          c.Value = UCase(c)
        Next
        Application.EnableEvents = True
      End If

      Set Rg3 = Application.Intersect(Target, Columns(4))
      If Not Rg3 Is Nothing Then
        Application.EnableEvents = False
        For Each c In Rg3
          c.Value = UCase(c)
        Next
        Application.EnableEvents = True
      End If

'**********************
'* Recherche doublons *
'**********************

      If Target.Column = 2 Then
        If Application.WorksheetFunction.CountIf(Range("B4:D27"), Target.Value) > 1 Then
          Adresse = Columns(2).Find(what:=Target.Value, After:=Target.Offset(1, 0), lookat:=xlWhole, _
            SearchDirection:=xlNext).Address
          If MsgBox("L'opérateur ' " & Target & " ' est déjà occupé sur un autre poste de charge." & Chr(10) & "Utilisation en " & Adresse & Chr(10) & Chr(10) & " Le supprimer ?", vbYesNo + vbCritical, "Doublons") = vbYes Then
            Target.Value = ""
          Else
            MsgBox "Doublon conservé", vbExclamation
          End If
        End If
      End If

      If Target.Column = 3 Then
        If Application.WorksheetFunction.CountIf(Range("B4:D27"), Target.Value) > 1 Then
          Adresse = Columns(3).Find(what:=Target.Value, After:=Target.Offset(1, 0), lookat:=xlWhole, _
            SearchDirection:=xlNext).Address
          If MsgBox("L'opérateur ' " & Target & " ' est déjà occupé sur un autre poste de charge." & Chr(10) & "Utilisation en " & Adresse & Chr(10) & Chr(10) & " Le supprimer ?", vbYesNo + vbCritical, "Doublons") = vbYes Then
            Target.Value = ""
          Else
            MsgBox "Doublon conservé", vbExclamation
          End If
        End If
      End If

      If Target.Column = 4 Then
        If Application.WorksheetFunction.CountIf(Range("B4:D27"), Target.Value) > 1 Then
          Adresse = Columns(4).Find(what:=Target.Value, After:=Target.Offset(1, 0), lookat:=xlWhole, _
            SearchDirection:=xlNext).Address
          If MsgBox("L'opérateur ' " & Target & " ' est déjà occupé sur un autre poste de charge." & Chr(10) & "Utilisation en " & Adresse & Chr(10) & Chr(10) & " Le supprimer ?", vbYesNo + vbCritical, "Doublons") = vbYes Then
            Target.Value = ""
          Else
            MsgBox "Doublon conservé", vbExclamation
          End If
        End If
      End If

'*****************************************
'* Recherche valeur existante dans liste *
'*****************************************

      strChaine = Target.Value
      Set rngTrouve = Sheets("Liste").Columns(1).Cells.Find(what:=strChaine, lookat:=xlWhole)

      If rngTrouve Is Nothing Then
        MsgBox "Opérateur non enregistré", vbCritical, "Choix Impossible"
        Target.Value = ""
      End If

    End If

  End If

End Sub
je ne vois d'erreur si "test2" désigne bien une plage de la feuille concernée.
Je ne l'ai testé que sur un classeur bidon car, ne disposant que d'Excel2003, je n'ai pas ouvert votre classeur.
Désolé de ne pouvoir faire mieux, je passe la main à ceux qui disposent d'une version moderne…
ROGER2327
#4841


Dimanche 8 Décervelage 138 (Saint Bordue, Capitaine, ST)
16 Nivôse An CCXIX
2011-W01-3T16:29:38Z
 

gr12sable

XLDnaute Nouveau
Re : Erreur 50290la méthode intersect de l'objet global a échoué

J'ai toujours le pb sur cette erreur, mais en faisant plus attention elle apparait quand j'utilise la liste de validation.

intersect est-il compatible avec les liste de validations ?
 

Fo_rum

XLDnaute Accro
Re : Erreur 50290la méthode intersect de l'objet global a échoué

bonsoir

les formules des listes de validation sont-elles fiables ?
Peut-être un raccourci avec ce
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Dim Adresse As String, Rg As Range
 
  If Intersect(Target, Range("B2:D18")) Is Nothing Or Target = "" Then Exit Sub
  Application.EnableEvents = False
  Target = UCase(Target)
  If Application.CountIf(Range("B2:D18"), Target) > 1 Then
    'Doublons
    For Each C In Range("test2")
      If C = Target And C.Address <> Target.Address Then Adresse = C.Address
    Next
    If MsgBox("L'opérateur ' " & Target & " ' est déjà occupé sur un autre poste de charge." & Chr(10) _
            & "Utilisation en " & Adresse & Chr(10) & Chr(10) & " Le supprimer ?", vbYesNo + vbCritical, "Doublons") = vbYes Then
      Target = ""  'ou Range(Adresse) = ""
    Else
      MsgBox "Doublon conservé", vbExclamation, ""
      GoTo 10
    End If
  Else
    'inconnu
    MsgBox "Opérateur non enregistré", vbCritical, "Choix Impossible"
    Target = ""
  End If
10 Application.EnableEvents = True
End Sub
Bien entendu, attention à l'instruction 10 !
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Erreur 50290la méthode intersect de l'objet global a échoué

Re...
Je n'arrive tjs pas à faire ce que je veux ... :( :( :( :(
Oui, et nous*, on n'a toujours pas vu à quoi s'applique ce code...​
ROGER2327
#4914


Dimanche 1er Gueules 138 (Dépucelage de Mère Ubu, ST)
7 Pluviôse An CCXIX
2011-W04-3T18:24:28Z

* "nous", ce sont les utilisateurs d'Excel2003 et versions antérieures.
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Erreur 50290la méthode intersect de l'objet global a échoué

Re...
Merdouille, je pensais avoir justement joint un fichier en version 2003 ... Je le remet de suite
Merci, mais je vous embête pour rien : j'ai regardé la nouvelle version de votre code sans rien y trouver à redire. (Tout au plus, il me semble que GoTo 10 peut être supprimé sans inconvénient.)
Je l'ai essayé et réessayé sans jamais obtenir l'erreur 50290. J'espère que d'autres se pencheront sur la question...​
ROGER2327
#4917


Lundi 2 Gueules 138 (Saint Sigisbée, eunuque, SQ)
8 Pluviôse An CCXIX
2011-W04-4T13:15:47Z
 

gr12sable

XLDnaute Nouveau
Re : Erreur 50290la méthode intersect de l'objet global a échoué

J'ai trouvé la solution, il fallait simplement préciser la feuille pour la définition de la plage, dans la partie Intersect (Target, Feuille.Range) ...
C'est con mais j'ai mis du temps à le trouver ...
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 079
Membres
103 455
dernier inscrit
saramachado