récupérer le chiffre d'un nom

glm

XLDnaute Occasionnel
Bonjour à tous,
je cherche à récupérer le chiffre de
ex: sem_1-->récupérer le chiffre et m'en servir àprés
sem_1 est un nom de cellule
Si qq à une idée
Merci
Bon dimanche
A+
 

Bricofire

XLDnaute Impliqué
Bonjour glm, Dam :)

glm, un truc pour récupérer les chiffres, par contre pour aller plus loin il faut que tu précises ou tu penses à la structure possible des noms dans le temps :

NomCell1
NomCell12
Nomn Cell123
123NomCell
Nom2Cell23...bref où se situeront les chiffres dans le nom, combien et stabilité du nommage ;)

le code est à adapter en fonction de...

Sub plop()
Dim I As Integer

For I = 1 To Len(Range('B5').Name.Name)
If Asc(Mid(Range('B5').Name.Name, I, 1)) > 47 And Asc(Mid(Range('B5').Name.Name, I, 1)) < 58 Then
MsgBox (I)
End If
Next I
End Sub


édition : comme promis, les commentaires :
Len est une fonction qui te retourne, le nombre de caractères d’une chaîne, donc ici le nb de K du nom.
Mid est une fonction qui te permet de retourner dans une chaîne , à partir d’un rang donné, le nb de K voulus (c’est pourquoi dans le cas de chaîne de longueur variable, il est dangereux de l’utiliser à la place de Right..). Asc Retourne le caractères ascii des lettres (voir table dans l’aide VBA) les chiffres vont de 48 à 57, donc ici on recherche les K qui sont dans cette fourchette pour signifier qu’on est en présence d’un chiffre.
Ensuite un message te donne la position de chaque caractère trouvé.



Bon WE,
Brico

Message édité par: Bricofire, à: 13/02/2006 00:50
 

glm

XLDnaute Occasionnel
J'ai du mal m'expliquer
milles excuses!!
j'ai plusieurs cellules qui se nome
A8 : sem_1
A43 : sem_2
etc...
je veux utiliser le chiffre qui se trouve dans ce nom 'sem_1'
et le mettre dans une variable
A priori en vba
Merci pour toutes vos idées
A+
 

glm

XLDnaute Occasionnel
J'ai trouvé em m'aidant du code de Bricofire

A8 porte le nom de sem_1

Dim MyString, FirstWord
FirstWord = Mid(Range('A8').Name.Name, 5)

cela me renvoie 1

C'est pas super !!

Merci à tous, surtout à toi bricofire
et bon dimanche
A+
 

Bricofire

XLDnaute Impliqué
Re tout le monde, :)

gml, vite fait :
-je te commenterai le code dans la soirée, c'est dimanche et la home family a des priorité devant la famille XLD :)
-C'est bien de déclarer tes variables, mais fait le complètement, Hervé m'a assez enquiquiné avec ça il ya longtemps :whistle: et il avait savrément raison ;)
-Ta syntaxe incomplète de Mid est dangereuse, essaies avec un nom qui a 7 caractères, vois dans l'aide VBA à, MId, Right et Left entre autres..
- Les choses précisées, je te joins une nouvelle piste qui tiens compte du fait que tu puisses avoir un nom avec un nombre à 2 digits, extrapolation facile pour plus si besoin.
Sub Plop2()

Dim I As Integer
Dim Nbr As Integer

I = 1
If IsNumeric(Right(Range('B5').Name.Name, I)) = True Then
Nbr = Right(Range('B5').Name.Name, I)
I = 2
If IsNumeric(Right(Range('B5').Name.Name, I)) = True Then
Nbr = Right(Range('B5').Name.Name, I)
End If
End If
MsgBox Nbr
End Sub


bon courage
à tout à l'heure pour les commentaires,


édition : comme promis, les commentaires :
Là, on a plus de précisions, du coup le code peut-être vu autrement, la réponse suivante de Charly2 montre que d’autres précisions peuvent apporter encore d’autres approches, d’où l’importance de bien cerner sa question…

Là on sait que le nombre recherché est toujours en fin de chaîne (on ne sait pas s’il est à un, deux ou plus chiffres),.
Là on emploie la fonction IsNumeric qui nous retourne Vrai ou faux selon que la chaîne analysée puisse être ou non un nombre. On emploie alors la fonction Right pour déterminer si le dernier K est un chiffre (si faux, on se fiche de savoir s’il y en a avant selon ta demande), si Oui, on met ce chiffre dans la variable Nbr.
Du coup, on teste de la même façon les deux derniers K, s’il c’est un nombre, on l’affecte à la valeur de Nbr.
Comme l’argument I de Right donne le nb de K retournés, on le met à 1 en début de procédure, et il passe à 2 si on a trouvé un chiffre en dernier pour tester les deux derniers digits….
Le message te retourne ici le nombre trouvé !

Quand au niveau de la déclaration des variables, c’est très utile de les déclarer ET de donner leur Type, ça évite pas mal d’erreurs en direct à la saisie et réagit clairement au débogage ! Déclare Dim Pop as Boolean par exemple, si tu inscris ensuite pop = la saisie rapide de VBA te proposera tout de suite True ou false, si tu mets une chaîne de K à la place, dès le lancement, tu auras une incompatibilité de type bien claire dessus, ce qui t’évite des recherches plus floues.. (si tu mets une valeur, c’est plus complexe, mais logique, CF l’aide). Ca te permet en plus de structurer tout de suite ta pensée par rapport à tes intentions, si tu ne sais pas le type de ta variable (qui peut être Variant), c’est que tu ne cernes pas quelque chose. De plus pour les appli importantes, ça te permet de les optimiser en gagnant des octets !
Bonne nuit,:)


Brico

Message édité par: Bricofire, à: 13/02/2006 00:52
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir glm, Bricofire, Ândré, bonsoir à toutes et à tous :)

glm, si ta cellule est nommée et si elle contient le n° de semaine de l'année, tu peux utiliser le code suivant :

Function NoSemaine(Cell As Range) As Integer
'
Dim Nom$
'
  Nom = Cell.Name.Name
  NoSemaine = Val(Mid(Nom, Len(Nom) - 1, 1)) * 10 + Val(Right(Nom, 1))
End Function

EDITION : Suppression d'une variable inutile et évolution du code...

A+ ;)

Message édité par: Charly2, à: 12/02/2006 21:43

Message édité par: Charly2, à: 12/02/2006 21:46
 

Bricofire

XLDnaute Impliqué
Bonsoir tout le monde, Charly2, :)

C'est fait les commentaires ont été rajoutés dans les Posts, celui-ci te permettra d'avoir une signalement si tu as coché le suivi car je ne sais pas si une édition déclenche cet évènement ?

Bonne nuit,

Brico
 

Charly2

Nous a quittés en 2006
Repose en paix
re à toutes et tous, bonsoir à Bricofire :)

Alors, tu as fainéanté toute l'AM ???

Balade ou ballade ??? C'est bientôt la St Valentin, alors... La ballade peut faire craquer :p

Sinon, j'ai reçu le mail de ton dernier post, mais rien pour la modif de celui d'avant : bon à savoir...

A+ ;)

Message édité par: Charly2, à: 13/02/2006 02:47
 

Bricofire

XLDnaute Impliqué
Re tout le monde, :)

Merci Charly2 du suivi, je m'en doutais un peu, mais du coup je Saurai ! :)

Eh Oui hier trekking, mais aussi Gauffres (mais avec de le Leffe... chut :whistle: :lol: ).
Sinon, oui demain, la St valentin, c'est complexe ça, un super code VBA, elle s'en fout complètement, même avec un addin Bolduc, donc faut se creuser plus la cervelle :S :silly:

Bonne journée,

Brico
 

Discussions similaires

Statistiques des forums

Discussions
312 497
Messages
2 088 988
Membres
104 000
dernier inscrit
dinelcia