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 :

Parcourir un range nommé [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut Parcourir un range nommé
    Bonjour,

    J'ai nommé plusieurs plages dans le gestionnaire des noms. Je souhaite parcourir chacune de mes plages: si une cellule est vide, j'y mets 0. Pour l'instant, je teste sur une seule plage et mon code ne marche pas.
    Erreur d'exécution '1004': Erreur définie par l'application ou par l'objet
    Pourriez-vous m'aider ?
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub test()
        Dim Plage As Range, Cellule As Range
        Set Plage = Worksheets("P1c").Names("P1_26").RefersToRange.Value
    'P1c est le nom de l'onglet
    'P1_26 est le nom de la plage    
        For Each Cellule In Plage
            If Cellule.Value = "" Then
                Cellule.Value = 0
            End If
        Next Cellule
    End Sub

  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 : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

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

    Remplace la ligne "Set Plage..." par celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Range("P1_26")

    [Edit]
    Ton code pourrait se limiter à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Dim Cel As Range
     
    For Each Cel In Range("P1_26")
        If Cel = "" Then Cel = 0
    Next
     
    End Sub

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Tu as 2 cas de figure, si le nom se réfère à la feuille ou au classeur
    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
    Sub test()
    Dim Plage As Range, Cellule As Range
     
    'si le nom se refère à la feuille
    Set Plage = Worksheets("P1c").Names("P1_26").RefersToRange
     
    'OU BIEN
    'Si le nom se refère au classeur
    'Set Plage = ThisWorkbook.Names("P1_26").RefersToRange
     
    'P1c est le nom de l'onglet
    'P1_26 est le nom de la plage
    For Each Cellule In Plage
        If Cellule.Value = "" Then Cellule.Value = 0
    Next Cellule
    End Sub
    Sinon, tu peux faire sans boucle

    Edit

    Salut Fring, c'est plus direct

    Sinon, sans boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
     
    Worksheets("P1c").Range("P1_26").Replace "", 0, xlWhole
    End Sub

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut


    Merci à tous les 2.

    Fringe t'as solution marche nickel.

    Mercatog, ta solution sans boucle est top ! Par contre, la 1ère partie me génère la même erreur qu'avec mon code. Faut-il ajouter une référence pour utiliser la fonction ReferstoRange ?

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Regarde comment tu as défini ton nom

    Si dans Zone dans la fenêtre de définition du nom, tu as Classeur, il faudra mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = ThisWorkbook.Names("P1_26").RefersToRange
    Si dans Zone dans la fenêtre de définition du nom, tu as le nom de ta feuille P1c, il faudra mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Worksheets("P1c").Names("P1_26").RefersToRange

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    dans mon gestionnaire de noms, pour la zone P1_26, j'ai mis la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(P1c!$AY$1;1;0;NBVAL(P1c!$AY:$AY)-1;7)
    donc il y a le nom de l'onglet (P1c). donc j'avais testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Worksheets("P1c").Names("P1_26").RefersToRange
    mais ça me met le message d'erreur. C'est pour ça que j'ai fini par me demander si ce n'était pas lié à une référence manquante.

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    ça ne change rien

    Regarde dans ton gestionnaire de noms si dans étendu tu as Classeur ou ta feuille

    Question subsidiaire, as tu utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = ThisWorkbook.Names("P1_26").RefersToRange

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

Discussions similaires

  1. [XL-2003] parcourir un range de longueur variable de bas en haut
    Par AstridT dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/05/2011, 12h34
  2. Réponses: 2
    Dernier message: 20/07/2009, 15h55
  3. Comment parcourir un range ayant deux zones sélectionnées
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/09/2008, 15h00
  4. appeler le contenu d'un range nommé sur un classeur donné
    Par alexsolex dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/10/2007, 13h46
  5. [VBA-E] Parcourir un range ligne par ligne
    Par boosty dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/04/2006, 13h44

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