Variable objet ou variable de bloc with non définie [Fermé]

Signaler
Messages postés
20
Date d'inscription
mercredi 7 octobre 2015
Statut
Membre
Dernière intervention
24 décembre 2015
-
Messages postés
20
Date d'inscription
mercredi 7 octobre 2015
Statut
Membre
Dernière intervention
24 décembre 2015
-
Bonjour,

tout d'abord voici mon code :

Sub RechercheCompo()

Dim plage1 As Range, plage2 As Range, plage3 As Range
Dim Cellule1 As Range, Cellule2 As Range
Set Cellule1 = Range("J6")
Set plage1 = Range("D8:D300").Find(Range("J6").Value, , xlValues)(2, 2)
Set plage2 = Range("D8:D300").Find(Range("J6").Value, , xlValues)(5, 30)
Set plage3 = Range(plage1, plage2)
Dim add As Range, add2 As Range
Set Cellule2 = Range("K6")
Set add = plage3.Find(Cellule2.Value, , xlValues)(1, 1)
Set add2 = plage3.Find(Cellule2.Value, , xlValues)(4, 1)
If Not add Is Nothing Then
Range(add, Range(add, add2)).Select
Else
MsgBox "Désolé !" & Chr(10) & "Ce composant n'existe pas.", vbOKOnly + vbExclamation, "Erreur.."
End If

End Sub


Bon maintenant que vous avez lu mon travail je vous explique :
L'utilisateur entre deux données sur deux cellules J6 et K6.
De là, il clic sur la cellule J7 pour lancer la recherche.
Cette recherche fonctionne correctement pour tout mon fichier mais..
Elle ne fonctionne pas pour les lignes 9 à 17 ! J'ai beau chercher, je ne comprend pas..

Ami internautes, fana de VBA etc, je vous en prie S.O.S ! ^^

5 réponses

Messages postés
1400
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
16 avril 2020
139
Bonjour Neoplook, bonjour le forum,

Tu définis un plage sans être sûr qu'elle existe !...
Essaie comme ça :

Sub RechercheCompo()
Dim R As Range
Dim plage1 As Range, plage2 As Range, plage3 As Range
Dim Cellule1 As Range, Cellule2 As Range
Dim add As Range, add2 As Range

Set Cellule1 = Range("J6")
Set R = Range("D8:D300").Find(Cellule1.Value, , xlValues)
If Not R Is Nothing Then
    Set plage1 = R(2, 2)
    Set plage2 = R(5, 30)
    Set plage3 = Range(plage1, plage2)
Else
    'MsgBox "Désolé !" & Chr(10) & "Ce composant n'existe pas.", vbOKOnly + vbExclamation, "Erreur.."
    Exit Sub
End If

Set Cellule2 = Range("K6")
Set add = plage3.Find(Cellule2.Value, , xlValues)(1, 1)
Set add2 = plage3.Find(Cellule2.Value, , xlValues)(4, 1)
If Not add Is Nothing Then
    Range(add, Range(add, add2)).Select
Else
    MsgBox "Désolé !" & Chr(10) & "Ce composant n'existe pas.", vbOKOnly + vbExclamation, "Erreur.."
End If
End Sub

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57060 internautes nous ont dit merci ce mois-ci

Messages postés
20
Date d'inscription
mercredi 7 octobre 2015
Statut
Membre
Dernière intervention
24 décembre 2015

Bonjour ThauTheme !

Alors c'est génial ça fonctionne correctement à un détail près qui à son importance quand même..
Lorsque je rentre une valeur dans K6 qui n'existe pas dans la plage 3, et que je lance la macro, je me reprend le message d'erreur :Variable objet ou variable de bloc with non définie.

C'est assez frustrant..
Messages postés
1400
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
16 avril 2020
139
Bonjour Neoplook,

Toujours le même problème tu définis add2 sans être sûr que la valeur existe,,,
Essaie comme ça :

Sub RechercheCompo()
Dim R As Range
Dim plage1 As Range, plage2 As Range, plage3 As Range
Dim Cellule1 As Range, Cellule2 As Range
Dim add As Range, add2 As Range

Set Cellule1 = Range("J6")
Set R = Range("D8:D300").Find(Cellule1.Value, , xlValues)
If Not R Is Nothing Then
    Set plage1 = R(2, 2)
    Set plage2 = R(5, 30)
    Set plage3 = Range(plage1, plage2)
Else
    'MsgBox "Désolé !" & Chr(10) & "Ce composant n'existe pas.", vbOKOnly + vbExclamation, "Erreur.."
    Exit Sub
End If
Set Cellule2 = Range("K6")
Set add = plage3.Find(Cellule2.Value, , xlValues)(1, 1)
If Not add Is Nothing Then
    Set add2 = plage3.Find(Cellule2.Value, , xlValues)(4, 1)
    Range(add, Range(add, add2)).Select
Else
    MsgBox "Désolé !" & Chr(10) & "Ce composant n'existe pas.", vbOKOnly + vbExclamation, "Erreur.."
End If
End Sub

Messages postés
20
Date d'inscription
mercredi 7 octobre 2015
Statut
Membre
Dernière intervention
24 décembre 2015

Avec le code que tu viens de m'envoyer j'ai un souci. Lorsque justement K6 n'est pas présent dans la plage ça dit encore et encore Variable objet ou variable de bloc With non définie.
Mais hier soir après avoir cherché une solution miracle, j'ai trouvé quelque chose de mes propres moyens qui semble fonctionner sous toutes les conditions.
Voici mon code :
Sub RechercherComposant()

Dim base As Range, cible As Range
Dim composant As Range
Dim haut As Range, bas As Range

Set base = Range("j6")
Set cible = Range("k6")


materiel = Range("D8:D300").Find(base.Value, , xlValues).Address
plage1 = Range(Range(materiel)(2, 2), (Range(materiel)(5, 30))).Address
plage2 = Range(Range(materiel)(2, 2), (Range(materiel)(5, 30)))(4, 1).Address

Set composant = Range(plage1).Find(cible.Value, , xlValues)
If Not composant Is Nothing Then
Set haut = Range(plage1).Find(cible.Value, , xlValues)
Set bas = Range(plage1).Find(cible.Value, , xlValues)(4, 1)
Range(haut, bas).Select
Message = Range(plage1).Find(cible.Value, , xlValues).Address
Msg = Replace(Message, "$", "")
MsgBox "Le composant recherché se trouve dans la cellule" & Chr(10) & Msg, vbOKOnly + vbInformation, "Info d'emplacement"
Else
MsgBox "Désolé !" & Chr(10) & "Ce composant n'existe pas.", vbOKOnly + vbExclamation, "Erreur.."
Exit Sub
End If

End Sub


Puis-je avoir ton avis là-dessus ThauTheme ? :)
Messages postés
1400
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
16 avril 2020
139
Re,

je navet (si, si, dans ce cas on peut...) pas testé la seconde solution et je n'aime pas trop ta dernière avec des variables non déclarées de type String mélangé à des variable de type Range...

Essaie comme ça (testé) :

Sub RechercheCompo()
Dim R As Range
Dim plage1 As Range, plage2 As Range, plage3 As Range
Dim Cellule1 As Range, Cellule2 As Range
Dim add As Range, add2 As Range

Set Cellule1 = Range("J6")
Set R = Range("D8:D300").Find(Cellule1.Value, , xlValues)
If Not R Is Nothing Then
    Set plage1 = R(2, 2)
    Set plage2 = R(5, 30)
    Set plage3 = Range(plage1, plage2)
Else
    Exit Sub
End If
Set R = Nothing
Set Cellule2 = Range("K6")
Set R = Range("D8:D300").Find(Cellule2.Value, , xlValues)
If Not R Is Nothing Then
    Set add = R(1, 1)
    Set add2 = R(4, 1)
    Range(add, add2).Select
    Else
        MsgBox "Désolé !" & Chr(10) & "Ce composant n'existe pas.", vbOKOnly + vbExclamation, "Erreur.."
    End If
End Sub

Messages postés
20
Date d'inscription
mercredi 7 octobre 2015
Statut
Membre
Dernière intervention
24 décembre 2015

ThauTheme je te remercie vivement de prendre du temps pour ça :)

Donc maintenant, lorsque le contenu de K6 est dans la plage, la MsgBox d'erreur apparaît tout de même :/ et il ne me sélectionne plus la plage :'(
Messages postés
1400
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
16 avril 2020
139
Re,

Chez moi ça marche. regarde le fichier ici
Messages postés
20
Date d'inscription
mercredi 7 octobre 2015
Statut
Membre
Dernière intervention
24 décembre 2015

Je vois.. mais en réalité mon fichier n'est pas tourné dans ce sens là mais plus dans celui ci :http://www.cjoint.com/c/ELxquX2VNaS
Messages postés
1400
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
16 avril 2020
139
Re,

Je jette un coup d'œil se soir à la maison...
Messages postés
20
Date d'inscription
mercredi 7 octobre 2015
Statut
Membre
Dernière intervention
24 décembre 2015

Merci ! :D