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 :

Problème de référence de noms #REF [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Problème de référence de noms #REF
    Bonjour le forum,
    J'ai récemment ouvert une discussion.

    "Remplacement de noms de cellules"

    L'aide m'a été apportée par casavba et je l'en remercie.

    Il s'agissait de remplacer chaque nom ayant une chaîne de caractères par un nouveau nom en remplaçant cette chaîne de caractères. Exemple en remplaçant TOTO par TATA, le nom PANPANTOTO devenait PANPANTATA

    Aujourd'hui,
    Suite à suppression de feuilles dans mon classeur Excel, j'ai un certain nombre de noms qui se réfèrent à des feuilles affichées "#REF!", ce qui est logique.

    Je souhaite ne sélectionner que les noms avec référence "#REF!"

    Parmi ceux-ci, pour les noms qui contiennent la chaîne "PAPA", je souhaite qu'ils se réfèrent à la feuille "FEUIL1", pour les autres à la feuille "FEUIL2"

    J'ai donc essayé d'adapter le code proposé par casavba et qui fonctionnait très bien.

    Nouveau 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
    Sub Renom()
     
    Dim FEUIL As Worksheet
    For Each FEUIL In ThisWorkbook.Worksheets
        RenomPlage (FEUIL.Name)
    Next
    End Sub
     
     
     
    Sub RenomPlage(ByVal nFeuil As String)
     
    Dim pRange As Range
    Dim nNom As Name
     
     
    On Error Resume Next
    'Boucle sur les noms du classeur
    For Each nNom In ThisWorkbook.Names
     
    Set pRange = nNom.RefersToRange
     
    If Not pRange Is Nothing Then
    'Vérifie si le nom appartient à la feuille --
            If Worksheets(nFeuil).Name = pRange.Worksheet.Name And nNom.RefersTo Like "*#REF*" > 0 Then
                    If nNom.Name Like "*PAPA*" Then
                            nNom.RefersTo = Replace(nNom.RefersTo, "#REF", "FEUIL1")
                    Else
                            nNom.RefersTo = Replace(nNom.RefersTo, "#REF", "FEUIL2")
                    End If
            End If
    End If
     
    Set pRange = Nothing
     
    Next nNom
     
    End Sub
    Le pb est que je n'arrive pas au résultat escompté

    Merci pour votre aide.

    Marcel

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Précision
    Re-bonsoir,

    Je voulais expliciter ma démarche.

    Le classeur initial avait un certains nombre de feuilles que j'ai recopiées dans le même classeur.

    Ensuite, j'ai supprimé les premières feuilles, d'où ces noms avec pour références "#REF".

    Je voudrais réaffecter ces noms , aux mêmes plages, aux feuilles FEUIL1 et FEUIL2, en fonction d'une chaîne de caractères comprises dans la nom, ici PAPA.

    Si, dans ma liste de noms, j'ai le nom VOITUREPAPATRUC avec une référence #REF!suivie d'une plage de cellules, ce nom sera affecté à la même plage de FEUIL1, sinon il sera affecté, pour la même plage, à la feuille FEUIL2.

    La chaîne de caractères à tester, ici "PAPA" peut se trouver à n'importe quelle place dans le nom.

    Merci pour votre aide.

    Marcel.

  3. #3
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut une proposition...
    Il n'y a pas besoin de plusieurs procédures et d'appels : toutes les plages nommées sont dans un seul conteneur "WorkBook".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        For Each nNom In ActiveWorkbook.Names 'Pour tous les noms de plage du classeur actif
            If Left(nNom.Value, 6) = "=#REF!" Then        'Si Erreur de référence ?
                If InStr(nNom.Name, "PAPA") <> 0 Then    'Si la plage contient le mot 'PAPA' Attention en MAJUSCULES
                    'Renomme vers Feuil1
                    nNom.RefersTo = Replace(nNom.RefersTo, "#REF", "FEUIL1")
                Else
                    'Sinon renomme vers Feuil2
                    nNom.RefersTo = Replace(nNom.RefersTo, "#REF", "FEUIL2")
                End If
            End If
        Next nNom
    si j'ai bien compris !

    Renomme les références fausses en pointant vers de nouvelles feuilles (aussi en fonction du nom de la plage) mais en gardant les noms des plages inchangés.

    ESVBA

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut OK
    Essayé et vérifié OK

    La gestion des noms par VBA n'est pas toujours facile. A ma connaisssance, il n'existe pas de tutoriels exhaustifs à ce sujet (.........)
    Merci à toi, et JOYEUX NOEL !

    Marcel

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

Discussions similaires

  1. [FLASH MX2004] this et problème de référence
    Par cristolb dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 03/05/2006, 22h33
  2. Problème de référence de données circulaire
    Par Wismerhill50 dans le forum Langage
    Réponses: 3
    Dernier message: 23/10/2005, 22h38
  3. [d6][expert WSDL] problème d'espace de nom.
    Par tchup dans le forum Web & réseau
    Réponses: 1
    Dernier message: 01/09/2005, 14h46
  4. Réponses: 2
    Dernier message: 20/08/2004, 17h10
  5. problème de références _ptr dans une map STL
    Par Mr_Tyu dans le forum CORBA
    Réponses: 1
    Dernier message: 10/08/2004, 10h39

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