Imbriquer with .. end with

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FdeCourt
Le #21402971
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
FdeCourt
Le #21403081
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.
Michel MTO
Le #21403211
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" 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.
FdeCourt
Le #21403701
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.
isabelle
Le #21406391
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
michdenis
Le #21408411
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" 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
Michel MTO
Le #21423791
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

Publicité
Poster une réponse
Anonyme