OVH Cloud OVH Cloud

Problème de "Range"

6 réponses
Avatar
Eric
Je ne parviens pas à comprendre pourquoi mon code plante.

Chaque cellule de la plage B3:Y3 de la feuille 2 de mon classeur contient
une clé vers une ligne de la feuille 1. je cherche une cellule dans une plage
B3:B77 de ma feuille 1 (une espèce d'adressage indirect) correspondant à
cette clé. A partir de celle-ci (par décalage) je fais un copier/collage
spécial vers une zone de la feuille 2.

Private Sub DéclencheMaJCAA_Click()
Dim Cell, Cible As Range
Dim Intitulé As String
For Each Cell In Worksheets(2).Range("B3:Y3")
Intitulé = Cell.Value
Set Cible = Nothing
If Intitulé <> "" Then
Set Cible = Worksheets(1).Range("b3:b77").Find(Intitulé,
LookAt:=xlWhole)
End If
Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0, 36)).Copy
Worksheets(2).Range("AD3").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlPasteSpecialOperationAdd
Next
End Sub

Seulement, La méthode Find plante car il semble que la range("B3:B77") ne
soit pas reconnue.

Enfin... des fois ça marche parce VBA semble être calé sur la bonne feuille !

En gros, ce qui m'arrangerait, c'est qu'on me dise là où il y a une
confusion dans l'adressage des feuilles/plages ...

Merci d'avance

6 réponses

Avatar
isabelle
bonjour Eric,

modifie cette ligne :

Set Cible = Worksheets(1).Range("b3:b77").Find(Intitulé, LookAt:=xlWhole)

par celle ci

Set Cible = Worksheets(1).Range(Worksheets(1).Range("b3:b77").Find(Intitulé, LookAt:=xlWhole).address)

isabelle

Je ne parviens pas à comprendre pourquoi mon code plante.

Chaque cellule de la plage B3:Y3 de la feuille 2 de mon classeur contient
une clé vers une ligne de la feuille 1. je cherche une cellule dans une plage
B3:B77 de ma feuille 1 (une espèce d'adressage indirect) correspondant à
cette clé. A partir de celle-ci (par décalage) je fais un copier/collage
spécial vers une zone de la feuille 2.

Private Sub DéclencheMaJCAA_Click()
Dim Cell, Cible As Range
Dim Intitulé As String
For Each Cell In Worksheets(2).Range("B3:Y3")
Intitulé = Cell.Value
Set Cible = Nothing
If Intitulé <> "" Then
Set Cible = Worksheets(1).Range("b3:b77").Find(Intitulé,
LookAt:=xlWhole)
End If
Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0, 36)).Copy
Worksheets(2).Range("AD3").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlPasteSpecialOperationAdd
Next
End Sub

Seulement, La méthode Find plante car il semble que la range("B3:B77") ne
soit pas reconnue.

Enfin... des fois ça marche parce VBA semble être calé sur la bonne feuille !

En gros, ce qui m'arrangerait, c'est qu'on me dise là où il y a une
confusion dans l'adressage des feuilles/plages ...

Merci d'avance



Avatar
isabelle
il y a aussi cette ligne qui ne fonctionnera pas:

Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0, 36))

si
Set Cible = Nothing

isabelle


Je ne parviens pas à comprendre pourquoi mon code plante.

Chaque cellule de la plage B3:Y3 de la feuille 2 de mon classeur contient
une clé vers une ligne de la feuille 1. je cherche une cellule dans une plage
B3:B77 de ma feuille 1 (une espèce d'adressage indirect) correspondant à
cette clé. A partir de celle-ci (par décalage) je fais un copier/collage
spécial vers une zone de la feuille 2.

Private Sub DéclencheMaJCAA_Click()
Dim Cell, Cible As Range
Dim Intitulé As String
For Each Cell In Worksheets(2).Range("B3:Y3")
Intitulé = Cell.Value
Set Cible = Nothing
If Intitulé <> "" Then
Set Cible = Worksheets(1).Range("b3:b77").Find(Intitulé,
LookAt:=xlWhole)
End If
Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0, 36)).Copy
Worksheets(2).Range("AD3").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlPasteSpecialOperationAdd
Next
End Sub

Seulement, La méthode Find plante car il semble que la range("B3:B77") ne
soit pas reconnue.

Enfin... des fois ça marche parce VBA semble être calé sur la bonne feuille !

En gros, ce qui m'arrangerait, c'est qu'on me dise là où il y a une
confusion dans l'adressage des feuilles/plages ...

Merci d'avance



Avatar
anonymousA
bonjour,

extrait de l'aide d'excel

Find recherche une information spécifique dans une plage et renvoie un
objet Range qui représente la première cellule où cette information
apparaît. Cette méthode renvoie la valeur Nothing si l'information n'est
pas trouvée. N'affecte ni la sélection ni la cellule active.


Donc si cible est défini comme range , ce qu'il est visiblement , et que
Find renvoie Nothing alors cible recoit nothing. Dans ces conditions,
cible.offset n'a pas de sens.
Si il y a quelque chose qui doit planter, ce n'est pas en l'occurrence
Find mais Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0,
36)).Copy car offset de nothing pose problème.

A+


Je ne parviens pas à comprendre pourquoi mon code plante.

Chaque cellule de la plage B3:Y3 de la feuille 2 de mon classeur contient
une clé vers une ligne de la feuille 1. je cherche une cellule dans une plage
B3:B77 de ma feuille 1 (une espèce d'adressage indirect) correspondant à
cette clé. A partir de celle-ci (par décalage) je fais un copier/collage
spécial vers une zone de la feuille 2.

Private Sub DéclencheMaJCAA_Click()
Dim Cell, Cible As Range
Dim Intitulé As String
For Each Cell In Worksheets(2).Range("B3:Y3")
Intitulé = Cell.Value
Set Cible = Nothing
If Intitulé <> "" Then
Set Cible = Worksheets(1).Range("b3:b77").Find(Intitulé,
LookAt:=xlWhole)
End If
Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0, 36)).Copy
Worksheets(2).Range("AD3").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlPasteSpecialOperationAdd
Next
End Sub

Seulement, La méthode Find plante car il semble que la range("B3:B77") ne
soit pas reconnue.

Enfin... des fois ça marche parce VBA semble être calé sur la bonne feuille !

En gros, ce qui m'arrangerait, c'est qu'on me dise là où il y a une
confusion dans l'adressage des feuilles/plages ...

Merci d'avance



Avatar
anonymousA
ah , et effectivement comme le fait bien remarquer Isabelle, ton cible
est défini à nothing dans ta boucle en tete de boucle et si jamais tu as
une cellule appartenant à B3:Y3 qui est égale à="" alors ton cible reste
à nothing et du coup ce que je t'écrivais préalablement arrive.
Pour t'en sortir,

on error resume next
For Each Cell In Worksheets(2).Range("B3:Y3")
Intitulé = Cell.Value
Set Cible=nothing
If Intitulé <> "" Then
Set Cible = Worksheets(1).Range("b3:b77").Find(Intitulé,
LookAt:=xlPart)
End If

Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0, 36)).Copy
Worksheets(2).Range("AD3").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlPasteSpecialOperationAdd

Next

on error goto 0

A+


bonjour,

extrait de l'aide d'excel

Find recherche une information spécifique dans une plage et renvoie un
objet Range qui représente la première cellule où cette information
apparaît. Cette méthode renvoie la valeur Nothing si l'information n'est
pas trouvée. N'affecte ni la sélection ni la cellule active.


Donc si cible est défini comme range , ce qu'il est visiblement , et que
Find renvoie Nothing alors cible recoit nothing. Dans ces conditions,
cible.offset n'a pas de sens.
Si il y a quelque chose qui doit planter, ce n'est pas en l'occurrence
Find mais Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0,
36)).Copy car offset de nothing pose problème.

A+



Je ne parviens pas à comprendre pourquoi mon code plante.

Chaque cellule de la plage B3:Y3 de la feuille 2 de mon classeur
contient une clé vers une ligne de la feuille 1. je cherche une
cellule dans une plage B3:B77 de ma feuille 1 (une espèce d'adressage
indirect) correspondant à cette clé. A partir de celle-ci (par
décalage) je fais un copier/collage spécial vers une zone de la
feuille 2.

Private Sub DéclencheMaJCAA_Click()
Dim Cell, Cible As Range
Dim Intitulé As String
For Each Cell In Worksheets(2).Range("B3:Y3")
Intitulé = Cell.Value
Set Cible = Nothing
If Intitulé <> "" Then
Set Cible = Worksheets(1).Range("b3:b77").Find(Intitulé,
LookAt:=xlWhole)
End If
Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0, 36)).Copy
Worksheets(2).Range("AD3").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlPasteSpecialOperationAdd
Next
End Sub

Seulement, La méthode Find plante car il semble que la range("B3:B77")
ne soit pas reconnue.

Enfin... des fois ça marche parce VBA semble être calé sur la bonne
feuille !

En gros, ce qui m'arrangerait, c'est qu'on me dise là où il y a une
confusion dans l'adressage des feuilles/plages ...

Merci d'avance





Avatar
Eric
Isabelle,

merci pour ton aide précieuse !

Eric


il y a aussi cette ligne qui ne fonctionnera pas:

Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0, 36))

si
Set Cible = Nothing

isabelle


Je ne parviens pas à comprendre pourquoi mon code plante.

Chaque cellule de la plage B3:Y3 de la feuille 2 de mon classeur contient
une clé vers une ligne de la feuille 1. je cherche une cellule dans une plage
B3:B77 de ma feuille 1 (une espèce d'adressage indirect) correspondant à
cette clé. A partir de celle-ci (par décalage) je fais un copier/collage
spécial vers une zone de la feuille 2.

Private Sub DéclencheMaJCAA_Click()
Dim Cell, Cible As Range
Dim Intitulé As String
For Each Cell In Worksheets(2).Range("B3:Y3")
Intitulé = Cell.Value
Set Cible = Nothing
If Intitulé <> "" Then
Set Cible = Worksheets(1).Range("b3:b77").Find(Intitulé,
LookAt:=xlWhole)
End If
Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0, 36)).Copy
Worksheets(2).Range("AD3").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlPasteSpecialOperationAdd
Next
End Sub

Seulement, La méthode Find plante car il semble que la range("B3:B77") ne
soit pas reconnue.

Enfin... des fois ça marche parce VBA semble être calé sur la bonne feuille !

En gros, ce qui m'arrangerait, c'est qu'on me dise là où il y a une
confusion dans l'adressage des feuilles/plages ...

Merci d'avance






Avatar
Eric
merci pour tout !

eric


bonjour,

extrait de l'aide d'excel

Find recherche une information spécifique dans une plage et renvoie un
objet Range qui représente la première cellule où cette information
apparaît. Cette méthode renvoie la valeur Nothing si l'information n'est
pas trouvée. N'affecte ni la sélection ni la cellule active.


Donc si cible est défini comme range , ce qu'il est visiblement , et que
Find renvoie Nothing alors cible recoit nothing. Dans ces conditions,
cible.offset n'a pas de sens.
Si il y a quelque chose qui doit planter, ce n'est pas en l'occurrence
Find mais Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0,
36)).Copy car offset de nothing pose problème.

A+


Je ne parviens pas à comprendre pourquoi mon code plante.

Chaque cellule de la plage B3:Y3 de la feuille 2 de mon classeur contient
une clé vers une ligne de la feuille 1. je cherche une cellule dans une plage
B3:B77 de ma feuille 1 (une espèce d'adressage indirect) correspondant à
cette clé. A partir de celle-ci (par décalage) je fais un copier/collage
spécial vers une zone de la feuille 2.

Private Sub DéclencheMaJCAA_Click()
Dim Cell, Cible As Range
Dim Intitulé As String
For Each Cell In Worksheets(2).Range("B3:Y3")
Intitulé = Cell.Value
Set Cible = Nothing
If Intitulé <> "" Then
Set Cible = Worksheets(1).Range("b3:b77").Find(Intitulé,
LookAt:=xlWhole)
End If
Worksheets(1).Range(Cible.Offset(0, 21), Cible.Offset(0, 36)).Copy
Worksheets(2).Range("AD3").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlPasteSpecialOperationAdd
Next
End Sub

Seulement, La méthode Find plante car il semble que la range("B3:B77") ne
soit pas reconnue.

Enfin... des fois ça marche parce VBA semble être calé sur la bonne feuille !

En gros, ce qui m'arrangerait, c'est qu'on me dise là où il y a une
confusion dans l'adressage des feuilles/plages ...

Merci d'avance