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 :

Variable objet ou variable de bloc With non définie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 38
    Par défaut Variable objet ou variable de bloc With non définie
    Bonjour chère team!

    J'ai ce code:
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Dim Site As Range
        Dim Site1L As Range
        Dim SiteDL As Range
        Dim OnOffShore As Range
        Dim InOutCongo As Range
        Dim HS55 As Range
     
        Set Site = Cells(26, 1).EntireRow.Find(What:="Site", LookAt:=xlWhole)
        Set Site1L = Site.Offset(1, 0)
        Set SiteDL = Site.Offset(48, 0)
        Set OnOffShore = Cells(26, 1).EntireRow.Find(What:="On / OffShore", LookAt:=xlWhole)
        Set InOutCongo = Cells(26, 1).EntireRow.Find(What:="In / Out of Congo", LookAt:=xlWhole)
        Set HS55 = Cells(26, 1).EntireRow.Find(What:="55%", LookAt:=xlWhole)
     
     
            Application.ScreenUpdating = False
     
        If ActiveSheet.ProtectContents = True Then
     
            ActiveSheet.Unprotect Password:="1234"
     
            If Application.CountA(Range(Site1L, SiteDL)) = 0 Then
        '       Masquer les Colonnes
                OnOffShore.Select
                Selection.EntireColumn.Hidden = True
     
                InOutCongo.Select
                Selection.EntireColumn.Hidden = True
     
                If HS55.Offset(-1, 0) = 0 Then
            '       Masquer les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = True
                Else
            '       Afficher les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = False
                End If
            Else
        '       Afficher les Colonnes
                OnOffShore.Select
                Selection.EntireColumn.Hidden = False
     
                InOutCongo.Select
                Selection.EntireColumn.Hidden = False
     
                If HS55.Offset(-1, 0) = 0 Then
            '       Masquer les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = True
                Else
            '       Afficher les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = False
                End If
            End If
     
                ActiveSheet.Protect Password:="1234"
                Application.ScreenUpdating = True
        Else
            If Application.CountA(Range(Site1L, SiteDL)) = 0 Then
        '       Masquer les Colonnes
                OnOffShore.Select
                Selection.EntireColumn.Hidden = True
     
                InOutCongo.Select
                Selection.EntireColumn.Hidden = True
     
                If HS55.Offset(-1, 0) = 0 Then
            '       Masquer les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = True
                Else
            '       Afficher les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = False
                End If
            Else
        '       Afficher les Colonnes
                OnOffShore.Select
                Selection.EntireColumn.Hidden = False
     
                InOutCongo.Select
                Selection.EntireColumn.Hidden = False
     
                If HS55.Offset(-1, 0) = 0 Then
            '       Masquer les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = True
                Else
            '       Afficher les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = False
                End If
            End If
     
                Application.ScreenUpdating = True
        End If
     
    Target.Offset(1, 0).Select
    Dans la colonne "Site", quand j'insère une valeur, il m'affiche un message disant: "Erreur d'exécution '91':
    Variable objet ou variable de bloc With non définie"

    Comment puis je m'en sortir SVP?

    D'avance merci!

    LePrince

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 38
    Par défaut
    Désolé d'avoir dérangé.

    J'ai modifié le code comme suit et ça fonctionne. Je n'ai plus de message d'erreur.

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Dim Site As Range
        Dim Site1L As Range
        Dim SiteDL As Range
        Dim OnOffShore As Range
        Dim InOutCongo As Range
        Dim HS55 As Range
     
        Application.ScreenUpdating = False
     
        If ActiveSheet.ProtectContents = True Then
     
            ActiveSheet.Unprotect Password:="1234"
     
            Set Site = Cells(26, 1).EntireRow.Find(What:="Site", LookAt:=xlWhole)
            Set Site1L = Site.Offset(1, 0)
            Set SiteDL = Site.Offset(48, 0)
            Set OnOffShore = Cells(26, 1).EntireRow.Find(What:="On / OffShore", LookAt:=xlWhole)
            Set InOutCongo = Cells(26, 1).EntireRow.Find(What:="In / Out of Congo", LookAt:=xlWhole)
            Set HS55 = Cells(26, 1).EntireRow.Find(What:="55%", LookAt:=xlWhole)
     
            If Application.CountA(Range(Site1L, SiteDL)) = 0 Then
        '       Masquer les Colonnes
                OnOffShore.Select
                Selection.EntireColumn.Hidden = True
     
                InOutCongo.Select
                Selection.EntireColumn.Hidden = True
     
                If HS55.Offset(-1, 0) = 0 Then
            '       Masquer les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = True
                Else
            '       Afficher les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = False
                End If
            Else
        '       Afficher les Colonnes
                OnOffShore.Select
                Selection.EntireColumn.Hidden = False
     
                InOutCongo.Select
                Selection.EntireColumn.Hidden = False
     
                If HS55.Offset(-1, 0) = 0 Then
            '       Masquer les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = True
                Else
            '       Afficher les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = False
                End If
            End If
     
                ActiveSheet.Protect Password:="1234"
                Application.ScreenUpdating = True
        Else
            Set Site = Cells(26, 1).EntireRow.Find(What:="Site", LookAt:=xlWhole)
            Set Site1L = Site.Offset(1, 0)
            Set SiteDL = Site.Offset(48, 0)
            Set OnOffShore = Cells(26, 1).EntireRow.Find(What:="On / OffShore", LookAt:=xlWhole)
            Set InOutCongo = Cells(26, 1).EntireRow.Find(What:="In / Out of Congo", LookAt:=xlWhole)
            Set HS55 = Cells(26, 1).EntireRow.Find(What:="55%", LookAt:=xlWhole)
     
            If Application.CountA(Range(Site1L, SiteDL)) = 0 Then
        '       Masquer les Colonnes
                OnOffShore.Select
                Selection.EntireColumn.Hidden = True
     
                InOutCongo.Select
                Selection.EntireColumn.Hidden = True
     
                If HS55.Offset(-1, 0) = 0 Then
            '       Masquer les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = True
                Else
            '       Afficher les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = False
                End If
            Else
        '       Afficher les Colonnes
                OnOffShore.Select
                Selection.EntireColumn.Hidden = False
     
                InOutCongo.Select
                Selection.EntireColumn.Hidden = False
     
                If HS55.Offset(-1, 0) = 0 Then
            '       Masquer les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = True
                Else
            '       Afficher les Colonnes
                    HS55.Select
                    Selection.EntireColumn.Hidden = False
                End If
            End If
     
                Application.ScreenUpdating = True
        End If
     
    Target.Offset(1, 0).Select
    MERCI A TOUS!

    LePrince

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ta modification va fonctionner aujourd'hui ... mais pas forcément demain

    pourquoi ? Car une variable issue d'un Find est à "Nothing" si aucun résultat n'est trouvé.

    il faut toujours tester l'état de la variable avant de l'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim MaCelluleCherchee as Range
     
    Set MaCelluleCherchee = Feuil1.UsedRange.Find("toto") ' je simplifie sans les paramètres !
    If Not MaCelluleCherchee Is Nothing Then
        ' On peut utiliser la variable
    Else
        ' On a rien trouvé, il faut gérer ensuite le cas
    End If

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 38
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    ta modification va fonctionner aujourd'hui ... mais pas forcément demain

    pourquoi ? Car une variable issue d'un Find est à "Nothing" si aucun résultat n'est trouvé.

    il faut toujours tester l'état de la variable avant de l'utiliser
    Bonjour Joe.levrai,

    Merci beaucoup pour ton conseil.

    J'ai donc modifié mon code comme suit:

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Dim Site As Range
        Dim Site1L As Range
        Dim SiteDL As Range
        Dim OnOffShore As Range
        Dim InOutCongo As Range
        Dim HS55 As Range
     
        Application.ScreenUpdating = False
     
        If ActiveSheet.ProtectContents = True Then
     
            ActiveSheet.Unprotect Password:="1234"
     
            Set Site = Cells(26, 1).EntireRow.Find(What:="Site", LookAt:=xlWhole)
            Set Site1L = Site.Offset(1, 0)
            Set SiteDL = Site.Offset(48, 0)
            Set OnOffShore = Cells(26, 1).EntireRow.Find(What:="On / OffShore", LookAt:=xlWhole)
            Set InOutCongo = Cells(26, 1).EntireRow.Find(What:="In / Out of Congo", LookAt:=xlWhole)
            Set HS55 = Cells(26, 1).EntireRow.Find(What:="55%", LookAt:=xlWhole)
     
            If Not Site Is Nothing Then
                If Application.CountA(Range(Site1L, SiteDL)) = 0 Then
            '       Masquer les Colonnes
                    If Not OnOffShore Is Nothing Then
                        OnOffShore.Select
                        Selection.EntireColumn.Hidden = True
                    Else
                        MsgBox ("Colonne 'In / Out of Congo' introuvable")
                    End If
     
                    If Not OnOffShore Is Nothing Then
                        InOutCongo.Select
                        Selection.EntireColumn.Hidden = True
                    Else
                        MsgBox ("Colonne 'On / OffShore' introuvable")
                    End If
     
                    If HS55.Offset(-1, 0) = 0 Then
                '       Masquer les Colonnes
                        If Not HS55 Is Nothing Then
                            HS55.Select
                            Selection.EntireColumn.Hidden = True
                        Else
                            MsgBox ("Colonne '55%' introuvable")
                        End If
                    Else
                '       Afficher les Colonnes
                        If Not HS55 Is Nothing Then
                            HS55.Select
                            Selection.EntireColumn.Hidden = False
                        Else
                            MsgBox ("Colonne '55%' introuvable")
                        End If
                    End If
                Else
            '       Afficher les Colonnes
                    If Not OnOffShore Is Nothing Then
                        OnOffShore.Select
                        Selection.EntireColumn.Hidden = False
                    Else
                        MsgBox ("Colonne 'In / Out of Congo' introuvable")
                    End If
     
                    If Not OnOffShore Is Nothing Then
                        InOutCongo.Select
                        Selection.EntireColumn.Hidden = False
                    Else
                        MsgBox ("Colonne 'On / OffShore' introuvable")
                    End If
     
                    If HS55.Offset(-1, 0) = 0 Then
                '       Masquer les Colonnes
                        If Not HS55 Is Nothing Then
                            HS55.Select
                            Selection.EntireColumn.Hidden = True
                        Else
                            MsgBox ("Colonne '55%' introuvable")
                        End If
                    Else
                '       Afficher les Colonnes
                        If Not HS55 Is Nothing Then
                            HS55.Select
                            Selection.EntireColumn.Hidden = False
                        Else
                            MsgBox ("Colonne '55%' introuvable")
                        End If
                    End If
                End If
            Else
                MsgBox ("Colonne 'Site' introuvable")
            End If
     
            ActiveSheet.Protect Password:="1234"
            Application.ScreenUpdating = True
        Else
            Set Site = Cells(26, 1).EntireRow.Find(What:="Site", LookAt:=xlWhole)
            Set Site1L = Site.Offset(1, 0)
            Set SiteDL = Site.Offset(48, 0)
            Set OnOffShore = Cells(26, 1).EntireRow.Find(What:="On / OffShore", LookAt:=xlWhole)
            Set InOutCongo = Cells(26, 1).EntireRow.Find(What:="In / Out of Congo", LookAt:=xlWhole)
            Set HS55 = Cells(26, 1).EntireRow.Find(What:="55%", LookAt:=xlWhole)
     
            If Not Site Is Nothing Then
                If Application.CountA(Range(Site1L, SiteDL)) = 0 Then
            '       Masquer les Colonnes
                    If Not OnOffShore Is Nothing Then
                        OnOffShore.Select
                        Selection.EntireColumn.Hidden = True
                    Else
                        MsgBox ("Colonne 'In / Out of Congo' introuvable")
                    End If
     
                    If Not OnOffShore Is Nothing Then
                        InOutCongo.Select
                        Selection.EntireColumn.Hidden = True
                    Else
                        MsgBox ("Colonne 'On / OffShore' introuvable")
                    End If
     
                    If HS55.Offset(-1, 0) = 0 Then
                '       Masquer les Colonnes
                        If Not HS55 Is Nothing Then
                            HS55.Select
                            Selection.EntireColumn.Hidden = True
                        Else
                            MsgBox ("Colonne '55%' introuvable")
                        End If
                    Else
                '       Afficher les Colonnes
                        If Not HS55 Is Nothing Then
                            HS55.Select
                            Selection.EntireColumn.Hidden = False
                        Else
                            MsgBox ("Colonne '55%' introuvable")
                        End If
                    End If
                Else
            '       Afficher les Colonnes
                    If Not OnOffShore Is Nothing Then
                        OnOffShore.Select
                        Selection.EntireColumn.Hidden = False
                    Else
                        MsgBox ("Colonne 'In / Out of Congo' introuvable")
                    End If
     
                    If Not OnOffShore Is Nothing Then
                        InOutCongo.Select
                        Selection.EntireColumn.Hidden = False
                    Else
                        MsgBox ("Colonne 'On / OffShore' introuvable")
                    End If
     
                    If HS55.Offset(-1, 0) = 0 Then
                '       Masquer les Colonnes
                        If Not HS55 Is Nothing Then
                            HS55.Select
                            Selection.EntireColumn.Hidden = True
                        Else
                            MsgBox ("Colonne '55%' introuvable")
                        End If
                    Else
                '       Afficher les Colonnes
                        If Not HS55 Is Nothing Then
                            HS55.Select
                            Selection.EntireColumn.Hidden = False
                        Else
                            MsgBox ("Colonne '55%' introuvable")
                        End If
                    End If
                End If
            Else
                MsgBox ("Colonne 'Site' introuvable")
            End If
     
            Application.ScreenUpdating = True
        End If
     
    Target.Offset(1, 0).Select

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tu testes à chaque fois la variable OnOffShore, or il me semble que l'un de chacun des deux test "Is Nothing" est censé se faire sur InOutCongo également ?

    par ailleurs, il est inutile de sélectionner un Range pour ensuite travailler dessus

    ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    InOutCongo.Select
    Selection.EntireColumn.Hidden = True
    ralentit l’exécution de ta procédure et fait bouger inutilement l'affichage du classeur
    on lui préfère donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InOutCongo.EntireColumn.Hidden = True

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2013
    Messages : 38
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    tu testes à chaque fois la variable OnOffShore, or il me semble que l'un de chacun des deux test "Is Nothing" est censé se faire sur InOutCongo également ?
    Ooops, en effet :p! C'est le défaut du copier-coller.
    Merci de la remarque, je viens de corriger.

    Citation Envoyé par joe.levrai Voir le message
    on lui préfère donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InOutCongo.EntireColumn.Hidden = True
    J'en apprends des choses aujourd'hui!
    Merci beaucoup Joe.levrai pour ces précieuses indications.
    J'en prend bien note!

    LePrince

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

Discussions similaires

  1. Variable objet ou variable bloc with non définie
    Par tarbala dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/05/2008, 12h19
  2. 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
  3. Réponses: 11
    Dernier message: 12/06/2007, 09h26
  4. Variable objet ou variable d'un bloc With non définie.
    Par paradeofphp dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/05/2007, 20h41
  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