Test un nom avec les noms des cellules nommées d'1 classeur Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
v
vba-new
Membre impliqué
Membre impliqué
Messages : 2'946
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 7 mai 2016, 16:32

Bonjour à tous !

Tu as pu résoudre ton souci autrement mais je donne quand même une petite précision en fonction de la portée (étendue) d'un champ nommé :

Si le champ nommé LouReeD a une étendue sur tout le classeur, alors cmp.Name = LouReeD

Mais :
Si le champ nommé LouReeD a une étendue seulement sur un onglet ('A lire' par exemple), alors cmp.Name = 'A lire'!LouReeD

Ceci explique probablement le problème que tu rencontres... :D
vba-new
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'088
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 7 mai 2016, 16:55

Bonjour,

j'avais vu cela également, dans "formules" "Gestions des noms" il y a bien la colonne "étendue".
Je me suis aperçu alors que LouReeD était en feuille : 'A lire'!$A$235
J'ai donc supprimer le nom LouReeD.
J'ai fait "nouveau" avec comme nom LouReeD et fait référence à 'A lire'!$A$235
retour sur la fenêtre des "formules" et ô surprise LouReeD est étendue "au classeur".
Je relance mon code de création avec le test de validité et patatra, le même cinéma !

J'ai une étiquette nommée qui s'appelle "_1" (sans les guillemets) faisant référence à Système!$B$2 avec une étendu "classeur".
je donne comme nom dans l'inputbox _1,
lors du test le code trouve l'égalité et me met le message d'erreur...

C'est à rien y comprendre...

Merci tout de même et @ bientôt

LouReeD

pour qu'il trouve l'égalité il faut que je mette : LouReeD, respecter la casse...
C'est pourquoi avec Ucase je pensais m'en sortir.... et je vois que ça marche....
Je n'avais pas du faire les tests dans le bon ordre !!!!
Une fois avec Ucase, puis retour en arrière, une fois avec étendu en classeur, sans réessayer avec Ucase !!!!
Donc je confirme :
vba-new la porté des cellule nommée avait à voir quelque chose dans mon problème ! :D
merci à vous, à voir maintenant si je vais faire la modification du code dans ce sens....

Mais comme l'appli est pour le retour de la section téléchargement, j'ai encore un peu de temps devant moi... :wink:

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 7 mai 2016, 17:04

Fermer par la croix une InputBox équivaut à annuler. La valeur renvoyée est False.
Il y a d'ailleurs une ambiguïté sur laquelle je suis tombé récemment en testant si la valeur saisie = False ; si tu demandes de saisir un nombre, l'utilisateur saisit 0, le test sur saisie = False renvoie True !
Sinon, sur Le_nom ton test est valide a-priori.
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'088
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 7 mai 2016, 17:07

Merci,

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 7 mai 2016, 17:09

Ah oui ! La casse a son importance. Excel compare par défaut en mode Texte (ne tient pas compte de la casse) mais VBA par défaut en mode binaire...
La solution serait peut-être d'utiliser la fonction StrComp, dont un paramètre définit le mode de comparaison (consulte l'aide VBA sur cette fonction).
Bonne soirée
v
vba-new
Membre impliqué
Membre impliqué
Messages : 2'946
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 7 mai 2016, 17:14

@MFerrand

Pour gérer la saisie d'une inputbox, il ne faut pas tester la valeur False mais utiliser :
If VarType(Le_Nom) = vbBoolean Then
   'Instructions si clic sur Croix de fermeture
Else
   'Autres instructions
End If
Pour pouvoir gérer le type de variable, il faut alors déclarer la variable Le_Nom en variant :
Dim Le_Nom as Variant
Lorsque tu saisis 0, ton test renvoie True simplement parce que False = 0 ! Et True = -1... :D

2ème remarque, je vois que LouReed utilise la fonction InputBox.
Pour arriver à choper l'action du clic sur la croix de fermeture, il faut utiliser la méthode Application.InputBox.

Dans le cas de LouReed, un clic sur la croix (ou Annuler) te retournera une chaîne vide "".
vba-new
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 7 mai 2016, 17:22

Merci pour vbBoolean, je le note en mémoire ! :D

Tu as toujours intérêt à une variable Variant pour recueillir une InputBox si tu veux tester (sinon l'erreur 13 est reste suspendue au-dessus de ta tête).
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'088
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 7 mai 2016, 17:51

Hey !!!
A vous écouter je vois que je suis encore loin de votre niveau ! :lol:
Donc si je ne change pas mon code je fais un test du genre :
If Le_nom = "" then exit sub
Si je change mon code pour mettre Application.InputBox je fais un test du genre :
If VarType(Le_Nom) = vbBoolean Then exit sub

Ai-je bien compris ?

Le test ="" est fait dans la fonction "validité" mais du coup sur une annulation il y a le messagebox, c'est pourquoi l'idée de la gestion de la croix et du bouton annuler...

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
v
vba-new
Membre impliqué
Membre impliqué
Messages : 2'946
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 7 mai 2016, 18:02

Voilà ce que j'aurais fait jeune padawan... :lol:
Sub Ajouter_un_compte()
    Dim Der_colonne As Long
    Dim Nom_du_tableau
    [surligner]Dim Le_nom As Variant[/surligner]

    Application.ScreenUpdating = False
    Le_nom = [surligner]Application.InputBox[/surligner]("Veuillez donner un nom à cette nouvelle feuille. Attention ! Pas d'espaces, pas de caractère spéciaux, merci.", _
                                  "Ajout d'un suivi de compte", _
                                  Type:=2) 'le paramètre Type permet de spécifier le type des données renvoyées. 2 => Texte

    'l'utilisateur clique sur Annuler ou la croix de fermeture
    'la variable 'Le_nom' retourne un False qui est un booléen
    [surligner]If VarType(Le_nom) = vbBoolean Then Exit Sub[/surligner]

    If vérif_validitée_nom(Le_nom) = False Then
        MsgBox "Erreur dans le nom. Pas d'espaces, pas de caractères spéciaux, pas plus de 28 caractères ou bien la feuille existe déjà.", [surligner]vbExclamation[/surligner]
        Exit Sub
    End If
vba-new
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'088
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 7 mai 2016, 18:31

Merci !
Cette fois le post est VALIDE ! :lol:
Pas facile d'apprendre tout seul ou en scrutant ce forum... :? Mais bon chat petit va loin, non ?

Merci @ vous deux et @ très bientôt sur ce site !

LouReeD
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message