IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Excel - Objet Variable ou block With non défini [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    comptable
    Inscrit en
    Novembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2015
    Messages : 2
    Par défaut Excel - Objet Variable ou block With non défini
    Bonjour à tous,

    Très autodidacte, Je viens souvent sur ce site piocher des informations très utiles pour créer mes propres macros VBA et ainsi améliorer mon utilisation Excel ; c'est donc la première fois que je fais appel à votre aide.

    Et malgré mes recherches, je ne trouve pas la solution à mon problème qui peut vous paraître evident...

    Je retraite un fichier texte dans Excel et je supprime des lignes inutiles en m'apuyant sur une recherche par mot clé se trouvant dans le fichier. Jusqu'à présent, j'utilisais une seule recherche dans une macro et cela fonctionnait plutôt bien.
    Je me rends compte qu'aujourd'hui, en ajoutant une seconde recherche, que j'ai une erreur de type "run-time error 91" "Object Variable or With Block variable not set" et je ne trouve pas et ne vois pas à quel type de problème auquel je suis confronté pour pouvoir le résoudre.

    Lorsque je fais une seule recherche, j'utilise le code suivant et je ne rencontre aucun souci. je fais une recherche sur le contenu d'une cellule, et je supprime les 6 lignes precedents et les 4 lignes suivantes sur tout le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    range("A1").Select
    On Error GoTo sortie
        Do
            cells.Find(What:="P.APAD", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                False, SearchFormat:=False).Activate
            range(ActiveCell.offset(-6, 0), ActiveCell.offset(4, 0)).Select
            selection.EntireRow.Delete
        Loop
    sortie:
    Sur le meme fichier je decide alors de faire plusieurs traitements du meme genre et j'ai donc tout naturellement copier/coller le meme code pour chercher sur un autre contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    'suppression lignes en-têtes
    range("A1").Select
    On Error GoTo sortie
        Do
            cells.Find(What:="P.APAD", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                False, SearchFormat:=False).Activate
            range(ActiveCell.offset(-6, 0), ActiveCell.offset(4, 0)).Select
            selection.EntireRow.Delete
        Loop
    sortie:
     
     
    'suppression lignes titres
    range("A1").Select
     
     
    On Error GoTo sortie1
        Do
            cells.Find(What:="VENDOR/", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
            range(ActiveCell.offset(-1, 0), ActiveCell.offset(2, 0)).Select
            selection.EntireRow.Delete
        Loop
    sortie1:
    Mais Excel ne le comprend pas comme je le souhaiterais
    Je n'arrive surtout pas à comprendre pourquoi une recherche se passé bien, et 2 traitements ça coince...
    Est-ce que quelqu'un pourrait m'éclairer sur ce point ?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je suis très surprit que cela .... Marche pour le premier.

    je ne connais pas le Do ... Loop

    par contre je connais les :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    do  While condition
    ...
    Loop
    ------------
    do Until condition
    ...
    loop
    ------------
    do
    ...
    loop While condition
    ------------
    do 
    ...
    loop Until condition
    Parce qu'il faut bien sortir de la boucle avec une condition (que j'ai pas vu )

    Donc peut-être que quand tu fais une autre recherche il se perd ...

    tu dis

    A+

    PS : Met ton code entre balise code (clic sur #) c'est plus lisible

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Ce type de code est à éviter à tout prix en phase de développement.
    Ca t'empêche de voir les problèmes.

  4. #4
    Candidat au Club
    Homme Profil pro
    comptable
    Inscrit en
    Novembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2015
    Messages : 2
    Par défaut
    Merci pour vos réponses.

    J'avoue que ça ne répond pas trop à mon problème technique car un DO... LOOP tout seul fonctionne bien car je l'utilise dans plusieurs macros mais il est vrai que je n'avais qu'un seul type de recherché, donc cette bidouille devait fonctionner quand même

    J'ai suivi les conseils et j'ai modifié mon code en conséquence pour donner cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    'suppression lignes en-têtes
     
    range("A1").Select
        With Maplage
        Do Until cells.Find(What:="P.APAD") Is Nothing
            cells.Find("P.APAD", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                False, SearchFormat:=False).Activate
            range(ActiveCell.offset(-6, 0), ActiveCell.offset(4, 0)).Select
            selection.EntireRow.Delete
        Loop
        End With
     
     
    'suppression lignes titres
    range("A1").Select
        With Maplage
        Do Until cells.Find(What:="VENDOR/") Is Nothing
            cells.Find("VENDOR/", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                False, SearchFormat:=False).Activate
            range(ActiveCell.offset(-1, 0), ActiveCell.offset(2, 0)).Select
            selection.EntireRow.Delete
        Loop
        End With
    et cela fonctionne beaucoup mieux
    Peut-être justement parce que je definis l'Objet variable avec un WITH au sein de la plage determinée comme demandé lors du message d'erreur n°91 d'Excel.

    Merci beaucoup pour votre aide, j'ai encore appris quelque chose de nouveau

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Le problème avec Find c'est qu'il n'aime pas trop les suppressions dans la plage de recherche et surtout, il faut tester si le range existe avec "Is Nothing". Cette procédure parcours la zone utilisée dans la feuille et colore en rouge les lignes puis ensuite, en partant du bas, supprime toutes les lignes ayants une cellule rouge en colonne A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Adr As String
        Dim I As Long
     
        'défini la plage sur la feuille active
        Set Plage = ActiveSheet.UsedRange
     
        'effectue la recherche
        Set Cel = Plage.Find("P.APAD", , xlFormulas, xlPart)
     
        'si trouvé
        If Not Cel Is Nothing Then
     
            'mémorise l'adresse
            Adr = Cel.Address
     
            Do
     
                'colore les lignes en rouge
                Range(Cel.Offset(-6), Cel.Offset(4)).EntireRow.Interior.ColorIndex = 3
     
                'continu la recherche
                Set Cel = Plage.FindNext(Cel)
     
            Loop While Adr <> Cel.Address
     
        End If
     
        'idem pour le second mot...
        Set Cel = Plage.Find("VENDOR/", , xlFormulas, xlPart)
     
        If Not Cel Is Nothing Then
     
            Adr = Cel.Address
     
            Do
     
                Range(Cel.Offset(-1), Cel.Offset(2)).EntireRow.Interior.ColorIndex = 3
     
                Set Cel = Plage.FindNext(Cel)
     
            Loop While Adr <> Cel.Address
     
        End If
     
        'boucle sur les cellules de la colonne A en partant du bas et supprime les lignes ayant la cellule en rouge
        For I = Plage.Rows.Count To 1 Step -1
     
            If Cells(I, 1).Interior.ColorIndex = 3 Then Cells(I, 1).EntireRow.Delete
     
        Next I
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur 91 variable objet ou variable de bloc with non définie
    Par ballantine's dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 03/12/2009, 16h41
  2. variable objet ou variable de bloc with non définie
    Par arctica dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/10/2009, 09h24
  3. Variable objet ou variable de bloc With non définie
    Par sl1980 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2007, 19h15
  4. Réponses: 11
    Dernier message: 12/06/2007, 09h26
  5. Réponses: 13
    Dernier message: 01/06/2006, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo