Application Intersect failed

Bonjour,

Au milieu d'un code, j'ai besoin de faire un If Not Intersect(...) is nothing. J'ai un probleme lors de mon application de Intersect et je me demande si ce n'est pas un probleme de syntaxe.

En resume, utile pour la comprehension de ce bout de code :

Dim Container As Range 'Container bien defini ensuite
Dim Component As String, First As String, FirstSecond As String
Component = Cell.Offset(0, 2).Value 'avec Cell deja defini, Component trouve le bon truc, c'est verifie
First = Mid(Component, 1, 1)
FirstSecond = Mid(Component, 1, 2)
If (First = "P" And Not (Intersect(Range(Component), Container)) Is Nothing) Or FirstSecond = "PF" Then
    ' instructions
End If

Quand j'execute, j'ai l'erereur suivante : Method "Intersect" of object "_Global" failed

Par mon intersection, j'ai voulu voir si une certaine valeur (definie en Component) se trouve dans la plage de cellule rentree dans Container

Merci de votre aide !

bonjour,

Je pense qu'il faut écrire

Application.Intersect...

Eventuellement voir l'aide de Intersect dans VBA...

'Dim isect
Set isect = Application.Intersect(Range(Component), Container)
If Not isect is nothing Then...

A+

Bonjour,

Dans ce code Container n'est pas initialisée, donc erreur logique.

Par ailleurs la non qualification est toujours susceptible de générer des imprévus (aucun point devant Range ou Cells impliquant le rattachement à une référence définie, donc référence variable...)

Cordialement.

Bonjour a vous deux,

@galopain01 : j'ai essaye mais cela m'amene a la meme erreur

@MFerrand : Si Container est initialise, je l'ai mis en commentaire (il est un peu complique mais j'ai verifie et il fonctionne)

Set Container = FL2.Range(FL2.Cells(3, NoCol2), FL2.Cells(DerLig2, NoCol2))

De plus qu'entends tu par mettre un point devant Range ou Cells ? Qu'implique un point a ce niveau la ? (Je ne suis pas une pro de vba )

Merci,

Bonsoir,

Avec une rondelle de saucisson je peux te dire s'il est bon... Mais avec un tranche de VBA on ne peux que faire des suppositions.

Alors tu nous donnes toute la macro ou rien... on perdra pas de temps !

A+

Si l'affectation est faite avant de l'utiliser, ok ! (si tes références sont correctes)

Dans cette ligne, tes expressions sont qualifiées, et si tu avais écrit :

With FL2
    Set Container =.Range(.Cells(3, NoCol2), .Cells(DerLig2, NoCol2))
End With

tous les Range et Cells seraient pareillement reliés à FL2.

Mais quand il n'y a pas de qualificateur ni de point indiquant qu'il y en a un, le rattachement est à l'objet ou la feuille active du classeur actif, d'où variabilité pas toujours maîtrisée...

Après, comme a dit Galopin... on ne peut parler que de ce qu'on voit.

Ok alors le but de cette macro est de trouver des valeurs dans une feuille "BOM" selon des valeurs definies dans une private sub lorsqu'on modifie des cases.

Puis de remplir la feuille "Items (1)" avec des valeurs trouvees en "BOM" selon des conditions

Sub Find_Rows(ItemNb, ItemRow) 'ItemNb = valeur d'une case enregistree avec une private sub, ItemRow = ligne de cette case
Dim FL1 As Worksheet, FL2 As Worksheet, Cell As Range, NoCol1 As Integer, NoCol2 As Long
Dim DerLig1 As Long, DerLig2 As Long, Plage As Range, Container As Range
Dim First As String, Component As String, Intermediary As String
Dim FirstSecond As String, Inter As Variant

    Set FL1 = Worksheets("BOM")
    Set FL2 = Worksheets("Container_specification")

    NoCol1 = 4
    NoCol2 = 2

    'Détermine la dernière ligne renseignée des feuilles de calculs
    DerLig1 = Split(FL1.UsedRange.Address, "$")(4)
    DerLig2 = Split(FL2.UsedRange.Address, "$")(4)

    'où FL1.Range(FL1.Cells(1, NoCol1), FL1.Cells(DerLig1, NoCol1)) détermine la plage de cellules à lire
    'idem pour container

    Set Plage = FL1.Range(FL1.Cells(4, NoCol1), FL1.Cells(DerLig1, NoCol1))
    Set Container = FL2.Range(FL2.Cells(3, NoCol2), FL2.Cells(DerLig2, NoCol2))

    For Each Cell In Plage
        If Cell.Value = ItemNb Then
            Component = Cell.Offset(0, 2).Value
            First = Mid(Component, 1, 1)
            If First = "L" Then
                Worksheets("Items (1)").Cells(ItemRow, 11) = Component
            ElseIf First = "C" Then
                If Worksheets("Items (1)").Cells(ItemRow, 13) = "" Then
                    Worksheets("Items (1)").Cells(ItemRow, 13) = Component
                Else
                    Worksheets("Items (1)").Cells(ItemRow, 14) = Component
                End I
            ElseIf First = "I" Then
                Intermediary = Component
            End If
        End If
    Next Cell

    For Each Cell In Plage
        If Cell.Value = Intermediary Then
            Component = Cell.Offset(0, 2).Value
            First = Mid(Component, 1, 1)
            FirstSecond = Mid(Component, 1, 2)
            Inter = Application.Intersect(Range(Component), Container)
            If (First = "P" And Not Inter Is Nothing) Or FirstSecond = "PF" Then 'MON PROBLEME EST ICI :)
                Worksheets("Items (1)").Cells(ItemRow, 10) = Component
            ElseIf First = "P" Then
                Worksheets("Items (1)").Cells(ItemRow, 13) = Component
            End If
        End If
    Next Cell

    Set FL1 = Nothing
    Set Plage = Nothing
End Sub

Si besoin je peux aussi joindre mes fichiers

Merci de votre aide en tout cas !

Re,

Container est une plage, ok.

Mais Range(Component) ?

Component est une donnée String, et rien n'indique dans ton code que sa valeur désigne un nom de plage.

Effectivement Component est une valeur texte mais j'aimerai voir si la valeur contenue dans Component (ou Cell.Offset(0,2)) est presente dans la plage Container.

Une idee de comment proceder pour en avoir un Range ?


En fait, de ce que je comprend c'est trop complique de transformer un string en range mais du coup comme je prends la valeur dans une cellule en particulier avec l'offset, j'essaye de fonctionner avec ca.

Du coup je suis un peu perdue. Quelle syntaxe dois-je utiliser ?

Celui la n'a pas l'air de fonctionner :

Intersect(Cell.Offset(0,2),Container)

J'en suis arrivee la mais j'ai encore un probleme de Intersect

Dim Compo As Range
Set Compo = FL1.Range(Cell.Offset(0, 2))
' defini tout le reste pareil
If (First = "P" And Not Application.Intersect(Compo, Container) Is Nothing) Or FirstSecond = "PF" Then
'instruction
Enf If

Une idee d'ou peut venir le preobleme cette fois ci ?

Sauf erreur tes 2 plages sont dans des feuilles différentes, je ne vois pas comment tu pourrais avoir une intersection !

Il me semble que tu devrais plutôt tester si la valeur Component se trouve dans Container :

    On Error Resume Next
    Inter = WorksheetFunction.Match(Component, Container, 0)

Merci beaucoup MFerrand (avec un peu de retard), je n'avais effectivement pas saisie la portée des intersections et un match fonctionne très bien.

Rechercher des sujets similaires à "application intersect failed"