opération sur chaîne

opération sur chaîne - VB/VBA/VBS - Programmation

Marsh Posté le 13-06-2006 à 11:13:48    

Bonjour, je voulais savoir si quelqu'un pouvait me dire comment il s'y prendrait en vba (sous excel) pour
récupérer les deux nombres en gras en sachant que les caractères avant le nombre peut varier. exemple
 
HIE/RO/PQIW03.50/050N002      
ou
HIE/RO/PW04.52/1244N1    
 
Merci d'avance...

Reply

Marsh Posté le 13-06-2006 à 11:13:48   

Reply

Marsh Posté le 13-06-2006 à 11:19:24    

je pense que quelqu'un peut te le dire, en effet [:god]

Reply

Marsh Posté le 13-06-2006 à 11:21:33    

merci de ton aide précieuse

Reply

Marsh Posté le 13-06-2006 à 11:36:27    

blase a écrit :

Bonjour, je voulais savoir si quelqu'un pouvait me dire comment il s'y prendrait en vba (sous excel) pour
récupérer les deux nombres en gras en sachant que les caractères avant le nombre peut varier. exemple
 
HIE/RO/PQIW03.50/050N002      
ou
HIE/RO/PW04.52/1244N1    
 
Merci d'avance...


 
 
C'est le principe pour trouver les caractères en gras. En suppossant que ton texte est en "A1"
    For i = 1 To Len(cells(1,1))
        If Cells(1, 1).Characters(i, 1).Font.Bold Then msg = msg & Mid(cells(1,1) i, 1)
    Next
    MsgBox msg
 
Bon courage

Reply

Marsh Posté le 13-06-2006 à 11:41:53    

Pardon, je me suis mal exprimé. C'était pour montrer les nombresque je devais prendre. il n'y a rien en gras dans le fichier excel. Il faudrait pouvoir supprimer toutes les lettres et les derniers chiffres à la fin pour récupérer ces deux nombres. mais merci

Reply

Marsh Posté le 13-06-2006 à 11:54:44    

blase a écrit :

Pardon, je me suis mal exprimé. C'était pour montrer les nombresque je devais prendre. il n'y a rien en gras dans le fichier excel. Il faudrait pouvoir supprimer toutes les lettres et les derniers chiffres à la fin pour récupérer ces deux nombres. mais merci


 
...Si tu sais pas décrire la régle tu vas avoir du mal à la coder
 
Avant le nombre que tu cherches il n'y a que des alpha (a,b, c..z) ?
Ton nombre comprend toujours un "." ?
La taille de ton nombre est-il le même ?
 
enfin .. juste un peu plus de précision dans ta demande et l'espoir est permis!!

Reply

Marsh Posté le 13-06-2006 à 12:11:39    

a mon avis faut se baser sur le /
et prendre 5 avant (point compris) et après jusqu'a la première lettre.  
 
C'est ça ?

Reply

Marsh Posté le 13-06-2006 à 13:05:06    

non, ca dépend de la grammaire de chaque string:

Citation :

les caractères avant le nombre peut varier


(bon, ok, c'est pas super français mais on comprend)

Reply

Marsh Posté le 13-06-2006 à 13:21:14    

Se baser sur le /, trouver le caractère non numérique avant et après et lire tout ce qu'il y a entre...

Reply

Marsh Posté le 13-06-2006 à 13:36:43    

scoobidoobidooooo a écrit :

Se baser sur le /, trouver le caractère non numérique avant et après et lire tout ce qu'il y a entre...


 
Est-ce que ca répond à ta règle !!
 
Private Sub CommandButton1_Click()
    Dim TrouveNombre As Boolean
 
    TrouveNombre = False
    For i = 1 To Len(Cells(1, 1))
        car = Mid(Cells(1, 1), i, 1)
        If Asc(car) < 58 And Asc(car) > 47 Then
            TrouveNombre = True
            msg = msg & car
        Else
            If (car = "/" Or car = "." ) And TrouveNombre Then
                msg = msg & car
            Else
                If TrouveNombre Then Exit For
            End If
        End If
    Next
    MsgBox msg
End Sub
 
A plus ?

Reply

Marsh Posté le 13-06-2006 à 13:36:43   

Reply

Marsh Posté le 13-06-2006 à 14:13:02    


Option Explicit
 
Private Sub Essai()
Dim s As String
    s = "HIE/RO/PQIW03.50/050N002"
    Debug.Print FormaterChaine(s)
    s = "HIE/RO/PW04.52/1244N12"
    Debug.Print FormaterChaine(s)
End Sub
 
Private Function FormaterChaine(ByVal Chaine As String) As String
Dim ar As Variant
Dim i As Integer, j As Integer, L As Integer
Dim strTmp As String, Ch As String * 1
     
    ar = Split(Chaine, "/" )
    strTmp = ""
    For i = 2 To UBound(ar)
        L = Len(ar(i))
        For j = 1 To L
            Ch = Mid(ar(i), j, 1)
            If Asc(Ch) = 78 Then Exit For
            If Asc(Ch) <= 65 Or Asc(Ch) >= 90 Then
                strTmp = strTmp & Ch
            End If
        Next
        ar(i) = strTmp
        strTmp = ""
    Next
    FormaterChaine = ar(2) & "/" & ar(3)
End Function

Reply

Marsh Posté le 13-06-2006 à 15:20:15    

Merci pour vos réponse, j'étais sur un autre truc. Je vais essayé et vous redis. Merci d'avance

Reply

Marsh Posté le 13-06-2006 à 16:44:45    

Celle de Paul Hood est la meilleure de loin

Reply

Marsh Posté le 13-06-2006 à 17:09:33    

kiki29 a écrit :

Celle de Paul Hood est la meilleure de loin


 
mais non, mais non !!
 
merci kiki29

Reply

Marsh Posté le 14-06-2006 à 08:15:56    

Merci pour tout. ça fonctionne

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed