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 :

Erreur "Object variable or With block variable not set" en définissant une Range


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Erreur "Object variable or With block variable not set" en définissant une Range
    Bonjour

    J'essaie d'écrire une fonction qui permet de renvoyer la région contenant toutes les cellules non vides au dessous d'une cellule d'origine, s'ils en existent. L'erreur apparait au moment de l'affectation de la region à la fonction (SelectRange = RangeResult). Voici le code de ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Function SelectRange(ByVal CellRange As Range) As Range
        If GetLineNumber(CellRange) > 1 Then
            Dim Ws_Result As Worksheet
            Set Ws_Result = CellRange.Worksheet
            Dim RangeResult As Range
            Set RangeResult = Ws_Result.Range(CellRange, CellRange.End(xlDown))
            SelectRange = RangeResult
        Else
            SelectRange = CellRange
        End If
     
    End Function
    Quelqu'un aura une idée sur l'origine de ce bogue qui me bloque depuis hier?
    Merci

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour DamAym,

    As-tu essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function SelectRange(ByVal CellRange As Range) As Range
        If GetLineNumber(CellRange) > 1 Then
            Dim Ws_Result As Worksheet
            Set Ws_Result = CellRange.Worksheet
            Dim RangeResult As Range
            Set RangeResult = Ws_Result.Range(CellRange, CellRange.End(xlDown))
            Set SelectRange = RangeResult
        Else
            Set SelectRange = CellRange
        End If
     
    End Function

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 912
    Points : 28 894
    Points
    28 894
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un code à adapter selon tes besoins
    Une fonction renvoie un range de la zone où se trouve la cellule, l'autre fonction renvoie le range uniquement des cellule vide de cette région.
    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
    Option Explicit
    Public Function SelectRegion(cellRange As Range) As Range
      Set SelectRegion = cellRange.CurrentRegion
    End Function
    Public Function SelectRegionVide(cellRange As Range) As Range
      Set SelectRegionVide = cellRange.CurrentRegion.SpecialCells(xlCellTypeBlanks)
    End Function
    Sub Test()
      Dim sht As Worksheet
      Dim maCellule As Range
      Set sht = ThisWorkbook.Worksheets("Test")
      Set maCellule = sht.Range("B3")
      ' Région
      MsgBox SelectRegion(maCellule).Address
      SelectRegion(maCellule).Select
      ' Région Vide
       MsgBox SelectRegionVide(maCellule).Address
      SelectRegionVide(maCellule).Select
    End Sub

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour vos réponses,

    Effectivement, maintenant ça passe l'instruction "Set SelectRange = RangeResult", mais il se plante à la fin de la fonction et me remonte la même erreur à ligne "End Function"

    Corona, elle est sympa ta fonction, mais elle me renvoie effectivement toute la region, y compris les colonnes voisines. J'essaie de récupérer juste la colonne de la Range passée en paramètre (elle est une cellule dans mon cas)

    S'il y en a d'autres idées j'en suis preneur

    Merci d'avance

    Bon une très bonne nouvelle,

    Apparemment l'erreur vient de la ligne "Option Explicit", je l'ai ajouté au début du script, et j'ai ajouté le "Set FunctionName" dans les autres fonction et ça a marché.

    Je peut dire que mon problème est résolu, Merci beaucoup pour votre aide

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 912
    Points : 28 894
    Points
    28 894
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Option Explicit est juste là pour s'obliger à déclarer toutes les variables que l'on utilise dans une procédure. C'est une bonne pratique de programmation qui évite que l'on utilise une variable nommée par erreur.
    SET variable = Objet (SET) est l'instruction obligatoire pour attribuer une référence d'objet à la variable contrairement à Variable = Valeur pour les autres variables. L'instruction Variable = Objet provoque un message d'erreur.

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

Discussions similaires

  1. Erreur 91 : "Object variable or With block variable not set" VBA
    Par Paulart dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/06/2014, 15h45
  2. Run time error 91 in vb:object variable or with block variable not set
    Par azzouz90 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 09/09/2011, 01h40
  3. Erreur (object variable or with block variable not set), Aide ADODB
    Par Louis.Gruhn dans le forum Général VBA
    Réponses: 6
    Dernier message: 21/12/2010, 10h21
  4. Error 91 :object variable or with block variable not set
    Par Eausport dans le forum Installation, Déploiement et Sécurité
    Réponses: 13
    Dernier message: 06/06/2009, 04h09
  5. [VBA-E] Erreur "Object variable or With block variable not set"
    Par @lex(is) dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/06/2006, 12h39

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