XL 2010 Variable Object ou variable de bloc With non définie

ocon

XLDnaute Nouveau
Bonjour à toutes et à tous,

Etant amateur débutant en vba, je me suis penché sur une macro pour le travail mais je bloque sur une partie.
Je souhaiterais faire une boucle qui à partir d'une donnée d'un classeur, retrouve dans un second classeur la ligne où se trouve cette valeur afin d'effacer un élément sur cette ligne.

J'ai simulé mon code sur un seul et même classeur et aucun erreur n'apparait. Cependant dès que je passe au deux classeurs séparés cela m'affiche l'erreur dans le titre de mon message. J'en déduis donc que le problème vient de l'identification du classeur mais je ne trouve pas comment le résoudre.

Si quelqu'un avait une solution pour moi, il/elle serait le/la bienvenu(e)

Voici mon code:

Sub effacer()

Dim CD As Workbook 'Classeur Destination
Dim OD As Worksheet 'Onglet Destination
Dim CS As Workbook 'Classeur Source
Dim OS As Worksheet 'Onglet source
Dim LIGNE As Long
Dim LI As Long 'N° de ligne où effacer
Dim CBS As Variant 'Valeur à retrouver
Dim R As Range 'Recherche

Set CD = ActiveWorkbook
Set OD = CD.Worksheets(1)
Set CS = Application.Workbooks.Open(" 'Classeur en question' ")
Set OS = CS.Worksheets(1)

LIGNE = 2
Do While LIGNE <= 41
CBS = OS.Cells(LIGNE, 3).Value
Set R = OD.Columns(34).Find(CBS, , xlValues, xlWhole)
LI = R.Row 'ERREUR
OD.Cells(LI, 32).Delete
LIGNE = LIGNE + 1
Loop

End Sub
 
Solution
Bonjour,

J'ai fait un test pour retrouver avec une boucle qui teste OD.Range("AH" & nLig) = CBS et ça fonctionne, donc visiblement le souci vient de l'utilisation du Find.

Ensuite j'ai testé si je remplace Columns(34) par ("AH1:AH10000"), et ça fonctionne. Visiblement c'est l'objet Columns qu'il n'aime pas.
Tu devrais définir ta plage avec un objet Range plutôt qu'une colonne du coup. Je n'ai pas trouvé d'explication à ce pourquoi ça réagit comme ça.

Bonne journée,

Ta réponse était bien la solution je t'en remercie.
Apres avoir revu ma syntaxe j'en suis arrivé au code suivant qui finalement fonctionne.
VB:
Sub suppr()

Dim CD As Workbook 'Classeur Destination'
Dim OD As Worksheet 'Onglet Destination'
Dim CS As Workbook...

ocon

XLDnaute Nouveau
Bonjour,

J'ai fait un test pour retrouver avec une boucle qui teste OD.Range("AH" & nLig) = CBS et ça fonctionne, donc visiblement le souci vient de l'utilisation du Find.

Ensuite j'ai testé si je remplace Columns(34) par ("AH1:AH10000"), et ça fonctionne. Visiblement c'est l'objet Columns qu'il n'aime pas.
Tu devrais définir ta plage avec un objet Range plutôt qu'une colonne du coup. Je n'ai pas trouvé d'explication à ce pourquoi ça réagit comme ça.

Bonne journée,

Ta réponse était bien la solution je t'en remercie.
Apres avoir revu ma syntaxe j'en suis arrivé au code suivant qui finalement fonctionne.
VB:
Sub suppr()

Dim CD As Workbook 'Classeur Destination'
Dim OD As Worksheet 'Onglet Destination'
Dim CS As Workbook 'Classeur Source'
Dim OS As Worksheet 'Onglet source'
Dim DernLigne As Long 'Dernière ligne de OD'
Dim LCB As Integer 'pour remplir colonne AH'
Dim LIGNE As Long 'ligne de la recherche'
Dim LI As Long 'ligne à effacer'
Dim CBS As Variant 'valeur à rechercher'
Dim R As Range 'Recherche'
Dim plage As Range 'colonne AH'

Set CD = ActiveWorkbook
Set OD = CD.Worksheets(1)
Set CS = Application.Workbooks.Open("Classeur source")
Set OS = CS.Worksheets(1)

'Boucle pour afficher numero de bail'
DernLigne = OD.Range("A" & Rows.Count).End(xlUp).Row
LCB = 1
Do While LCB <= DernLigne
    LCB = LCB + 1
    OD.Cells(LCB, 34).Value = OD.Cells(LCB, 7).Value & "-" & OD.Cells(LCB, 8).Value
Loop
'Fin de boucle'

'Boucle effacement'
LIGNE = 2
Set plage = Range("AH1", Cells(DernLigne, "AH"))
Do While LIGNE <= 42
    CBS = OS.Cells(LIGNE, 3).Value
    Set R = OD.Range("AH2:AH" & DernLigne).Find(CBS, , xlValues, xlWhole)
    LI = R.Row
    OD.Cells(LI, 32).Clear
    LIGNE = LIGNE + 1
Loop
'Fin de boucle'

End Sub

Merci à tous pour vos réponses
 

Discussions similaires

Réponses
9
Affichages
342
Réponses
2
Affichages
348

Statistiques des forums

Discussions
315 092
Messages
2 116 119
Membres
112 666
dernier inscrit
Coco0505