Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Imbriquer with .. end with

7 réponses
Avatar
Michel MTO
Bonjour à toutes et à tous,

Voilà j'écris ceci :

Sub Macro1()
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
With Worksheets(1).Range("a1:a500")
Set c = .Find(3, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlSolid
c.Interior.ColorIndex = 19
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <>
firstAddress
End If
End With

c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub

l'erreur suivante est retournée : Erreur d'exécution 91 => Variable objet ou
variable de bloc With non définie.

Quelqu'un peut-il m'aider ??
j'ai l'impression que l'on ne peut pas imbriquer plusieurs bloc de With ...
end with ???

Merci par avance

Michel MTO

7 réponses

Avatar
FdeCourt
Salut,

Il n'y a pas de problème de With imbriqué, par contre, dans ta macro,
je ne vois pas pourquoi tu imbrique 2 with a
Avatar
FdeCourt
Pardon...
je ne vois pas pourquoi tu imbriques 2 with puisqu'ils sont
identiques. A mon avis le deuxième peut être supprimé.

Ensuite, il y a une erreur ici :
c.Interior.Pattern = xlPatternGray50

car si tu ne trouves pas 3 dans ta plage, alors C est égal à Nothing,
donc impossible de lui mettre un motif de fond, d'ou l'erreur.

Par contre, si 3 est trouvé, alors ça passe très bien (même avec le
deuxième With de supprimé)

Cordialement,

F.
Avatar
Michel MTO
En fait j'ai pris cette procèdure en exemple, mais à priori ça le fait pas.

Voici mon vrai problème : ce sont mes données issues d'un fichier avec
extension htm
ici j'ai synthétisé les info, mais en réalité elles peuvent se trouver
n'importe où sur la feuille htm !!!

Je voudrais stocker dans des variables (variables indiciaires) les
différents éléments :
exemple:
jour(i), Voitureverte(j), vélojaune(i) etc ....

Jour 1
Voiture verte 6
Voiture jaune 5
Voitureorange 2
Voituremarron 4
Total voiture 17
Vélo jaune 5
Vélo rouge 4
Vélo vert 1
Total Vélo 10
Total jour 1 27

Jour 2
Voiture verte 2
Voiture jaune 2
Voitureorange 5
Voituremarron 3
Total voiture 12
Vélo jaune 4
Vélo rouge 9
Vélo vert 8
Total Vélo 21
Total jour 2 33

etc ......

Total du mois 60


J'utilise les bloc with et les fonctions recherche (.find()) pour récupérer
ces infos et pour pouvoir les présenter sous forme d'un tableau propre.

with "une plage de cellule"
Set marecherche = .Find(Jour1, LookAt:=xlWhole)
firstaddress =marecherche .address
If Not marecherche Is Nothing Then
Do
jour(i)=marecherche
Set marecherche2 = .Find(Voiture verte, LookAt:=xlWhole)
Voitureverte(j)=marecherche2
Set marecherche3 = .Find(Voiture jaune, LookAt:=xlWhole)
Voitureverte(k)=marecherche3
etc ...
Set marecherche4 = .Find(Total voiture, LookAt:=xlWhole)
Total voiture (p)=marecherche4 'correspondant au total
voiture du jour1
etc ...
''' et quand je fais un pas à pas de ma macro là l'erreur
apparait disant
''' que la variable objet n'est pas définie ????
set marecherche = .FindNext(marecherche)
Loop While Not marecherche Is Nothing And marecherche .Address
<> firstaddress
end if
end with

j'espère que c'est clair

"FdeCourt" a écrit dans le message de
news:
Pardon...
je ne vois pas pourquoi tu imbriques 2 with puisqu'ils sont
identiques. A mon avis le deuxième peut être supprimé.

Ensuite, il y a une erreur ici :
c.Interior.Pattern = xlPatternGray50

car si tu ne trouves pas 3 dans ta plage, alors C est égal à Nothing,
donc impossible de lui mettre un motif de fond, d'ou l'erreur.

Par contre, si 3 est trouvé, alors ça passe très bien (même avec le
deuxième With de supprimé)

Cordialement,

F.
Avatar
FdeCourt
Salut,

Déjà, au lieu d'insérer le fichier HTML dans la feuille, je le lirais
directement avec IE (automatique), puis en prendrait le code source
avec Excel pour l'analyser (ca me semble plus rapide, et permet de
profiter des identifiants qui peuvent être utilisés dans le code
HTML(name ou ID))

Sinon je regarderais plus tard si un expert ne pas trouvé la solution.

Cordialement,

F.
Avatar
isabelle
bonjour Michel,

je ne voie pas d'erreur dans les imbrications, j'opterais plus pour
"Variable objet non définie"
ajoute des lignes pour la vérification des variables
par exemple :
x = c
est ce que tu as défini les variables : Dim c As Range, ou bien Dim c As
String
ou bien utilise une lettre différente pour chaque variable
et exécute la macro en mode pas à pas

isabelle

Le 2010-03-19 11:29, Michel MTO a écrit :

Bonjour à toutes et à tous,

Voilà j'écris ceci :

Sub Macro1()
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
With Worksheets(1).Range("a1:a500")
Set c = .Find(3, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlSolid
c.Interior.ColorIndex = 19
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address<>
firstAddress
End If
End With

c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address<> firstAddress
End If
End With
End Sub

l'erreur suivante est retournée : Erreur d'exécution 91 => Variable objet ou
variable de bloc With non définie.

Quelqu'un peut-il m'aider ??
j'ai l'impression que l'on ne peut pas imbriquer plusieurs bloc de With ...
end with ???

Merci par avance

Michel MTO
Avatar
michdenis
Bonjour,

Une autre façon d'écrire la même chose !

Une modification importante a été apportée :
Set C = .Find(Elt, LookIn:=xlValues, LookAt:=xlWhole)
En ajoutant : LookAt:=xlWhole
la macro recherche seulement le contenu de la cellule
égale à 2 ou à 3. Si tu désires effectuer la recherche sur
les caractères 2 ou 3 comme une partie d'une chaîne de
caractères dans une cellule, tu dois utiliser : LookAt:=xlPart
afin d'éviter des surprises, tu te dois de choisir ce que tu
désires et l'indiquer à la procédure...c'est "obligatoire"

'----------------------------------------
Sub Macro1()
Dim Arr(), Elt As Variant, C As Range
Dim FirstAddress As String

Arr = Array(2, 3)
Application.ScreenUpdating = False
With Worksheets(1).Range("a1:a500")
For Each Elt In Arr
Set C = .Find(Elt, LookIn:=xlValues, LookAt:=xlWhole)
If Not C Is Nothing Then
FirstAddress = C.Address
Do
Select Case Elt
Case Is = Arr(0)
C.Interior.Pattern = xlSolid
C.Interior.ColorIndex = 19
Case Is = Arr(1)
C.Interior.Pattern = xlPatternGray50
End Select
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> FirstAddress
End If
Next
End With
Application.ScreenUpdating = True
End Sub
'----------------------------------------



"Michel MTO" a écrit dans le message de groupe de discussion :
ho052t$he4$
Bonjour à toutes et à tous,

Voilà j'écris ceci :

Sub Macro1()
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
With Worksheets(1).Range("a1:a500")
Set c = .Find(3, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlSolid
c.Interior.ColorIndex = 19
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <>
firstAddress
End If
End With

c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub

l'erreur suivante est retournée : Erreur d'exécution 91 => Variable objet ou
variable de bloc With non définie.

Quelqu'un peut-il m'aider ??
j'ai l'impression que l'on ne peut pas imbriquer plusieurs bloc de With ...
end with ???

Merci par avance

Michel MTO
Avatar
Michel MTO
Merci Isabelle, je me suis débrouillé autrement

Cdlt

"isabelle" a écrit dans le message de
news:%23uXNH8%
bonjour Michel,

je ne voie pas d'erreur dans les imbrications, j'opterais plus pour
"Variable objet non définie"
ajoute des lignes pour la vérification des variables
par exemple :
x = c
est ce que tu as défini les variables : Dim c As Range, ou bien Dim c As
String
ou bien utilise une lettre différente pour chaque variable
et exécute la macro en mode pas à pas

isabelle

Le 2010-03-19 11:29, Michel MTO a écrit :

Bonjour à toutes et à tous,

Voilà j'écris ceci :

Sub Macro1()
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
With Worksheets(1).Range("a1:a500")
Set c = .Find(3, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlSolid
c.Interior.ColorIndex = 19
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address<>
firstAddress
End If
End With

c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address<> firstAddress
End If
End With
End Sub

l'erreur suivante est retournée : Erreur d'exécution 91 => Variable objet


ou
variable de bloc With non définie.

Quelqu'un peut-il m'aider ??
j'ai l'impression que l'on ne peut pas imbriquer plusieurs bloc de With


...
end with ???

Merci par avance

Michel MTO