Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Soucis avec Instr !

  • Initiateur de la discussion Initiateur de la discussion Nicko
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Nicko

XLDnaute Occasionnel
Bonjour à tous,

Voila le code que j'utilise dans une macro:

If InStr(1, UCase(Feuil1.Control), "1") Then
NumCtrl = 1
GoTo Suite
End If
Idem pour 2, 3 et 4 avec simplement un changement de la variable NumCtrl

par exemple avec le N°15369, ca marche
Par contre si mon code est N° 43651, ca marche aussi (mais avec NumCtrl = 1 !) alors que je voudrais qu'il ne "regarde" que le premier terme du N°

quelqu'un aurait une solution ?
 
Re : Soucis avec Instr !

Bonjour

Essaye en contrôlant la position du caractère "1" dans la chaîne, tu ne fais que contrôler la présence du caractère "1" dans la chaîne.
Code:
If InStr(1, UCase(Feuil1.Control), "1") = 1 Then

@+Jean-Marie
 
Re : Soucis avec Instr !

Salut Nicko,

Il est normal que ca fonctionne dans le second cas que tu évoques puuisque le propre de l'instruction Instr est de trouver un caractère (ou une chaine) dans une chaine de caractère.

Je suppose que ton N° a toujours le meme format, j'entends N°xxxxxx même si dans ton exemple, ce n'est pas le cas.
Donc je te propose d'utiliser plutot Mid
If Mid("N°15369", 3, 1) = 1 Then

C'est à dire que si le premier numéro (soit le troisième caratère) de ton numéro est 1 alors ...

@+
 
Re : Soucis avec Instr !

Bonjour à tous

mid est bien mais pour le reste, d'après ce que tu dis, regarde pour simplifier ton code un truc du genre :

NumCtrl = mid(UCase(Feuil1.Control), 3,1)

qui mettrait direct ta variable au lieu des if then goto

A+
 
Re : Soucis avec Instr !

Bonjour,

Voici une proposition :

Sub essais()
chaine = "N° 234"
NumCtrl = first_digit(chaine)
End Sub


Function first_digit(chaine)
first_digit = ""
For b = 1 To Len(chaine)
x1 = Mid(chaine, b, 1)
If IsNumeric(x1) Then
b = Len(chaine)
first_digit = x1
End If
Next
End Function
 
Re : Soucis avec Instr !

Merci à tous pour vos solutions !

Pour repondre à Eric_S, ne connaissant pas trop bien la fonction Instr, je l'ai laissée telle que je l'avais trouvé !

Donc tout à fait d'accord que le nain minuscule (euh 1 minuscule) n'existe pas !!

ensuite, pour epondre à porcinet82, mon code n'est en fait qu'une serie de chiffre (pas de N°) pour detailler :
1, 2,3 ou 4 correspondent à une reference produit
puis vient ensuite une indication sur l'année (par ex 06)
puis sur le mois (07)
et enfin un nombre de produits qui evolue ... de 1 à ???

Ce qui m'interesse, c'est de detecter le chiffre en premiere position !
soit 1, 2, 3 ou 4
Je vais donc partir sur une solution avec Mid(Feuil1.control,1,1)
Ca devrait fonctionner ??

A suivre
 
Re :arrhhh ca coince !

voila la macro:

Private Sub Valider_Click()

If Mid(Feuil1.Control, 1, 1) Then
NumCtrl = 1
GoTo Suite
End If
If Mid(Feuil1.Control, 1, 2) Then
NumCtrl = 2
GoTo Suite
End If
If Mid(Feuil1.Control, 1, 3) Then
NumCtrl = 3
GoTo Suite
End If
If Mid(Feuil1.Control, 1, 4) Then
NumCtrl = 4
GoTo Suite
Else
MsgBox "Le NUMERO est incorrecte ou n'est pas attribué !", vbInformation + vbOKOnly, "Information"
Exit Sub
End If

Suite:
MsgBox "commence par " & NumCtrl
end sub

Le NumCtrl est toujours egal à 1 quel que soit le code !!!

Mais ou est l'erreur !?
 
Re : Soucis avec Instr !

re Nicko,

Heu... Je ne comprens pas tres bien pourquoi tu change le dernier caractère de la ligne de code Mid(Feuil1.Control, 1, 1)

Mid fonctionne de la manière suivante : Mid(chaine_caractère, début, longueur)

Donc dans ton second If, tu demandes de prendre 2 caractères.

Les plus grosses boulette sont celle que l'on voit le moins, tu fais un If mais tu ne lui demande pas de comparaison. Je m'explique, normalement dans un If tu as par exemple If Activecell.Value=1 Then ; et toi tu mets seulement If Mid(Feuil1.Control, 1, 1) Then

Je suppose que tu voulais tester la condition Si le permier caractère est 1 alors : If Mid(Feuil1.Control, 1, 1) =1 Then

Tiens nous au courant,

@+
 
Re : Soucis avec Instr !

Si ta macro a pour but de tester le premier caractère d'un numéro, je te consil plutot un code de ce genre :
PHP:
Private Sub Valider_Click()
Select Case Mid(Feuil1.Control, 1, 1)
Case 1
    'si le 1er caractère de Feuil1.Control = 1
    MsgBox "commence par 1"
Case 2
    'si le 1er caractère de Feuil1.Control = 2
    MsgBox "commence par 2"
Case 3
    'si le 1er caractère de Feuil1.Control = 3
    MsgBox "commence par 3"
Case 4
    'si le 1er caractère de Feuil1.Control = 4
    MsgBox "commence par 4"
Case Else
MsgBox "Le NUMERO est incorrecte ou n'est pas attribué !", vbInformation + vbOKOnly, "Information"
End Select
End Sub

@+
 
Re : Soucis avec Instr !

bonjour à tous

dans ce cas précis, (c'est just for the fun)

on peut utiliser produit = left(macell,nbcar)
et dans select case utiliser la variable produit

left renvoie les nbcar de gauche de macell
 
Re : Soucis avec Instr !

re, Salut Mutzik,

Effectivement, j'etais resté sur le Instr, mais comme il n'y a pas N° devant le nombre, on peut utiliser directement Left comme le dit Mutzik

Donc pour reprendre le code que m'a envoyé Hervé, que je vais modifier avec le Left de Mutzik, ca donnerait ceci :
PHP:
 Select Case Left(Feuil1.Control, 1)
    Case 1 To 4:
        MsgBox "commence par " & Left(Feuil1.Control, 1)
    Case Else: MsgBox "Le NUMERO est incorrecte ou n'est pas attribué !", vbInformation + vbOKOnly, "Information"
End Select

Quel travail d'equipe...

@+​
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
921
Réponses
15
Affichages
791
Réponses
4
Affichages
281
Réponses
5
Affichages
914
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…