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 :

VBA erreur 1004


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut
    Bonjour,

    Je souhaite masquer des colonnes en fonction d'un valeur presente dans une case. Feuil1 B7=3 afficher les 3 premieres colonnes de la feuille 2.

    Voici mon 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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim Plage As Range, Intersection As Range
    Dim nb_classeur As Integer
     
    Set Plage = Range("B7:B7")
    Set Intersection = Intersect(Target, Plage)
     
    If Not (Intersection Is Nothing) Then
    'MsgBox "Dans la plage"
    nb_classeur = ActiveSheet.Cells(7, 2)
    Sheets("Feuil2").Select
    Columns("B:D").Select
    Selection.EntireColumn.Hidden = True
    Sheets("Feuil1").Select
     
    End If
    End Sub
    J'ai une erreur sur la ligne Erreur 1004 La méthode Select de la classe Range à échoué

    Merci de votre aide.
    Cdlt.

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Tout ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets("Feuil2").Select
    Columns("B:D").Select
    Selection.EntireColumn.Hidden = True
    Sheets("Feuil1").Select
    Peut-être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil2").Columns("B:D").Hidden = True
    sans passer par tout les "Select" qui ne font que ralentir le processus et transformer ton écran en sapin de Noel

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Corrige ton message en mettant les tags de code parce que columns("B[smiley très souriant]") c'est pas top.
    Bon on comprend qu'en fait c'est :
    Ne faudrait-il pas mettre plutôt les numéros des colonnes ? (ça fait un bail que je n'ai pas fait de VB)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Avec ce code cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Not (Intersection Is Nothing) Then
    'MsgBox "Dans la plage"
    nb_classeur = ActiveSheet.Cells(7, 2)
    Sheets("Feuil2").Columns("B:D").EntireColumn.Hidden = True
     
    End If
    La ligne (avant End If) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Select
    devient à priori inutile.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut serar et le forum

    Je souhaite masquer des colonnes en fonction d'un valeur presente dans une case. Feuil1 B7=3 afficher les 3 premieres colonnes de la feuille 2.
    Tu est dans un module de classe lié à ta feuille : dans ce cas, les métodes SELECT et ACTIVATE ne sont autorisées que sur la feuille liée au module.
    Soit tu emploies Workbook_SheetChange du module ThisWorkBook
    soit tu supprimes les SELECT.

    P'tites critiques de ton code :
    Définir une plage pour en définir une autreme semble superflu.
    Tu n'as pas de gardes-fous pour un nombre inférieur à 1 en B7
    Je te conseillerais d'éviter les noms pouvant préter à confusion, ça évite les erreurs.
    Ton code n'étant pas complet, je suppose que tu utilises que tu mets en variable ? le nombre.
    Chez moi, ta macro donnerais à peu prés ç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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Plage_T As Range
    Dim Nb_classeur As Integer
    If Intersect(Target, Range("B7")) Is Nothing Then Exit Sub
    'Si la cellule B7 ne fait pas partie des cellules modifiées, sortir
    If 0 < Range("B7") And Cells(7, "B") < 256 Then
    'Si 0 < B7 < 256 (de 1 à 255, de B à IV)
        MsgBox "Pour les colonnes ""B:" & _
                Left(Cells(1, [B7] + 1).Address(0, 0), _
                Len(Cells(1, [B7] + 1).Address(0, 0)) - 1) & """  "
        Nb_classeur = [B7]
        Sheets("Feuil2").Columns("B:" & Left(Cells(1, [B7] + 1).Address(0, 0), _
                Len(Cells(1, [B7] + 1).Address(0, 0)) - 1)).Hidden = True
    End If
    End Sub
    A+

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut Merci
    Merci pour vos réponses.

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

Discussions similaires

  1. VBA -Erreur 1004 au milieu d'une boucle
    Par ginseb dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/02/2013, 23h39
  2. Formule EXCEL en VBA erreur 1004
    Par svetlan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2012, 16h36
  3. Formule EXCEL en VBA erreur 1004
    Par svetlan dans le forum VBScript
    Réponses: 0
    Dernier message: 28/11/2012, 09h51
  4. VB6 - copier/coller entre 2 appli ayant VBA - erreur 1004
    Par thomaz dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/10/2012, 16h47
  5. [XL-2003] [VBA] Erreur 1004 - Delete Classe range
    Par mirmoleboss dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/07/2011, 16h53

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