Erreur "bloc with"

Résolu/Fermé
Bouhyaa - 28 déc. 2011 à 16:13
eriiic Messages postés 24467 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 1 décembre 2022 - 2 janv. 2012 à 12:42
Bonjour,
Ci-dessous un extrait de mon code :
...
Windows("PROGATEL.xls").Activate
    Range("N2 : N" & NbLigne).Select
    Cells.Find(What:=ARport, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    While ARport = ARsuiv
        Selection.Offset(0, -11).Select
        Designation = ActiveCell.Text

...

en gros voila j'utilise la fonction Cells.find pour chercher une valeur dans mon tableau et la cellule selectionné par celle.find me sert de base pour me deplacer apres dans la feuille. (j'espere que c'est possible ^^ )
donc voila le bout de code que j'ai fait dans le but de réaliser ca, mais il m'apparrait un message d'erreur : "variable objet ou variable bloc with non défini"

que dois je faire ?
merci d'avance
bonne fetes

ci-apres le code en entiers au cas ou l'extrait était mal choisis ;)



Public Sub extractionDate()
Dim i As Long, j As Long, ARport As String, ARsuiv As String, Designation As String
Dim DateBrut As Date, DateAppro As Date, DateLimiteBrut As Date, DateLimiteAppro As Date

'================== Prerequis ==========================
Application.ScreenUpdating = False
Windows("PROGATEL.xls").Activate
Columns("L:L").Select ' mets la date dans le formant reconnu par la macro
Selection.NumberFormat = "dd/mm/yy"

Windows("PORTANF fin 11-2011.xlsm").Activate
Columns("N:N").Select
Selection.NumberFormat = "000000000"

Range("E2").Select ' Selectionne la première cellule du tableau
While Not (ActiveCell = "") ' Boucle tant que pas vide
    NbLigne = NbLigne + 1
    Selection.Offset(1, 0).Select
Wend

Windows("PROGATEL.xls").Activate
Range("N2").Select ' Selectionne la première cellule du tableau
While Not (ActiveCell = "") ' Boucle tant que pas vide
    NbLigneB1 = NbLigneB1 + 1
    Selection.Offset(1, 0).Select
Wend

j = 2
While j < NbLigneB1 + 1
    Windows("PROGATEL.xls").Activate
    Range("L" & j).Select
    R = ActiveCell.Text
    If R = "" Then
        ActiveCell.FormulaR1C1 = #1/1/2000#
        Range("IV" & j).Select
        ActiveCell.FormulaR1C1 = 1
    End If
    j = j + 1
Wend

i = 2
j = 2
hdate = #1/1/2001#
DateLimiteAppro = #1/1/2001#
DateLimiteBrut = #1/1/2001#
DateAppro = #1/1/2001#
DateBrut = #1/1/2001#

'======================== Programme ==========================
While i < NbLigne + 1
    Windows("PORTANF fin 11-2011.xlsm").Activate
    Range("E" & i).Select
    ARport = ActiveCell.Text
    ARsuiv = ARport
    
    Windows("PROGATEL.xls").Activate
    Range("N2 : N" & NbLigne).Select
    Cells.Find(What:=ARport, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    While ARport = ARsuiv
        Selection.Offset(0, -11).Select
        Designation = ActiveCell.Text
        
        If Right(Designation, 2) = " B" Then
                Selection.Offset(0, 9).Select
                DateBrut = ActiveCell.Text
                If DateBrut > DateLimiteBrut Then
                    DateLimiteBrut = DateBrut
                End If
           
        Else '//////////////////////////////////////////////////////////
                Selection.Offset(0, 9).Select
                DateAppro = ActiveCell.Text
                If DateAppro > DateLimiteAppro Then
                    DateLimiteAppro = DateAppro
                End If
        End If
        Range("N2 : N" & NbLigne).Select
        Cells.Find(What:=ARport, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
        Selection.Offset(1, 0).Select
        ARsuiv = ActiveCell.Text
        
    Wend
    Windows("PORTANF fin 11-2011.xlsm").Activate 'inscrit la date limite des _B
    Range("AY" & i).Select
    ActiveCell.FormulaR1C1 = DateLimiteBrut
    Windows("PORTANF fin 11-2011.xlsm").Activate 'inscrit la date limite des Appro
    Range("AZ" & i).Select
    ActiveCell.FormulaR1C1 = DateLimiteAppro
    i = i + 1
Wend
'===================Cloture/Remise en forme=======================

j = 2
While j < NbLigneB1 + 1
    Windows("PROGATEL.xls").Activate
    Range("IV" & j).Select
    R = ActiveCell.Text
    If R = 1 Then
        Range("L" & j).Select
        ActiveCell.FormulaR1C1 = ""
        Range("IV" & j).Select
        ActiveCell.FormulaR1C1 = ""
    End If
    j = j + 1
Wend
Windows("PROGATEL.xls").Activate
Columns("L:L").Select ' remet la date dans son format progatel
Selection.NumberFormat = "ddmmyy"
Windows("PORTANF fin 11-2011.xlsm").Activate
Columns("N:N").Select
Selection.NumberFormat = "00-00-00"

Application.ScreenUpdating = True

End Sub


<config>Windows Vista / Internet Explorer 9.0</config>
A voir également:

5 réponses

m@rina Messages postés 17493 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 5 décembre 2022 11 011
29 déc. 2011 à 02:41
Bonsoir,

En regardant rapidement ton code, tu as déjà deux variables (NbLigne et NbLigneB1) non définies.

m@rina
0
oui effectivement ;) je l'ai rajouté mais ce n'était pas sur ce point la que ca bugai !! les variables NbLigne et NbLigneB1 sont des compteur, je les ai déclaré en integer mais ca ne resous pas le probleme ...
merci quand meme de préter attention a mon message ^^
0
je tiens a préciser que l'erreur apparait sur la fonction mise en gras ci-dessous :

...
Windows("PROGATEL.xls").Activate
    Range("N2 : N" & NbLigne).Select
    Cells.Find(What:=ARport, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate    While ARport = ARsuiv        Selection.Offset(0, -11).Select
        Designation = ActiveCell.Text

...

merci
0
eriiic Messages postés 24467 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 1 décembre 2022 7 143
29 déc. 2011 à 13:38
Bonjour,

Un fichier exemple aurait été le bienvenu...

Sans tester je ferais en 2 temps via une variable.
dim c as range
set c = cells.find(...)
if not c is nothing then 
   ....
else
   ...
endif

Par ailleurs évite les .select inutiles, ton code en est bourré et ça ralenti.
ex, remplacer :
        Range("L" & j).Select
        ActiveCell.FormulaR1C1 = ""
par :
        Range("L" & j).FormulaR1C1 = ""
eric
0
merci pour le racourci pour eviter les variable !! ;)

pour le passage en deux temps c'est pas un mauvaise idée, j'ai essayé, j'ai essayé, peut-etre mal ;) mais j'ai toujours la même erreure ...
voila ce que ca donne :

Windows("PROGATEL.xls").Activate
    Range("N2 : N" & NbLigne).Select
    Set c = Cells.Find(What:=ARport, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Value
    If Not c = "" Then
        While ARport = ARsuiv
         ....
        wend
    end if
    c = ""
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 709
Modifié par pijaku le 29/12/2011 à 13:59
Salut tous,
Pourquoi ajouter .Value en fin de méthode find?
Tout simplement :
tu cherches l'objet range contenant dans une formule ARport :
Dim c As Range 
Set c = Range("N2 : N" & NbLigne).Cells.Find(What:=ARport, After:=ActiveCell, LookIn:=xlFormulas, _ 
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
        MatchCase:=False, SearchFormat:=False)

Et ensuite, si tu le trouve :
If Not c is Nothing then 
MsgBox "youpi on l'a trouvé en " & c.address

et si tu ne le trouve pas :
Else 
MsgBox "zut yépala!" 
End If


PS : je vais répéter Eriiic, si tu veux un coup de main plus efficace, commence par nettoyer ton code...
0
j'essaye de le netoyer ;) c'est vrai qu'il est lent mon code ...

sinon j'ai essayé ce que tu m'a proposé pijaku et il me sort un petit "incompatibilité de type" sur la ligne : set c = Range (...
0
vous m'avez dit comment simplifier les passage avec formulaR1C1 mais quand je ne veu pas editer la cellule mais une variable, comme ce qui suis par exemple :

  Range("L" & j).Select
    R = ActiveCell.Text


Comment je le simplifis ca ?
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 709
29 déc. 2011 à 14:19
??? Incompatibilité de type devrait signifier que quelque part une variable serait déclarée d'un type et que l'on tente d'y attribuer autre chose...
Ou pas...???
Là on va y aller à tâtons et ce sujet risque bien fort d'atteindre les 300 réponses...

Dis nous ce que tu veux faire avec la méthode find, étape par étape, en précisant bien par exemple :
Je cherche dans les formules de la colonne E de la feuille Feuil3 du classeur machin.xls si on trouve le chiffre 13 dans les formules...
0
eriiic Messages postés 24467 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 1 décembre 2022 7 143
29 déc. 2011 à 15:40
Re,

Quand on ecrit Is Nothing arrete de le remplacer à ta sauce par = ""
Ce n'est pas la même chose et ce n'est pas pour rien qu'on l'écrit ainsi.


eric
0
ha ok pardon, je pensais que c'était pour que je comprenne mieu ... je remplace tout de suite par is nothing ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour et bonne année !
En cette nouvelle année j'ai reussis à faire ce que je voulais, je vous remercies pour l'aide que vous m'avez apporté ça m'a été d'une grande aide ;)
merci beaucoup
0
eriiic Messages postés 24467 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 1 décembre 2022 7 143
2 janv. 2012 à 12:42
Bonjour,

Merci pour le retour et tous mes voeux pour 2012 également :-)
eric
0