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 :

InStr, c'est trop court, ou c'est trop long.


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 398
    Points : 203
    Points
    203
    Par défaut InStr, c'est trop court, ou c'est trop long.
    Bonjour à la communauté...
    Voilà, j'ai un tableau avec des string construit comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Tableau(1)="4/12/4"
    Tableau(....)="..."
    Tableau(6)="4/18/4"
    Tableau(....)="..."
    Tableau(33)="44.2/16/44.2"
    Tableau(44)="44.2/16/4"
    Je cherche donc avec un Do While dans mon tableau, du début à la fin, jusq'à trouvé un InStr <> 0, puis je sors.

    Mon problème est que si je cherche "44.2/16/4", InStr le trouve en premier dans "44.2/16/44.2" dans Tableau(33), alors que j'aimerais le trouver dans Tableau(44).

    Ce qui est normal, la chaine a été trouvée, mais pas que... J'aimerais trouver l'exacte chaine, de la bonne longueur. D'où mon sujet, c'est trop court, ou trop long ! !

    J'avais pensé à un Mid, mais je n'y arrive pas...

    Il faut savoir aussi que la chaine recherchée sera TOUJOURS de la bonne longueur, et je dois trouver l'exacte réplique, bref, les deux chaines doivent être de la même taille...

    Et oui, je parle bien ici de double vitrage...

    Si quelqu'un a une astuce, un conseil, voir même la solution... Je suis preneur...
    Bien à toi la communauté.
    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  2. #2
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 343
    Points : 493
    Points
    493
    Par défaut
    Code vba : 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
     
    Dim i As Integer
    Dim foundIndex As Integer
    Dim searchString As String
    Dim tableau(1 To 44) As String
     
    ' Initialisation du tableau (exemple)
    tableau(1) = "4/12/4"
    tableau(6) = "4/18/4"
    tableau(33) = "44.2/16/44.2"
    tableau(44) = "44.2/16/4"
     
    searchString = "44.2/16/4"
    foundIndex = -1
     
    i = 1
    Do While i <= UBound(tableau)
        If InStr(tableau(i), searchString) <> 0 And Len(tableau(i)) = Len(searchString) Then
            foundIndex = i
            Exit Do
        End If
        i = i + 1
    Loop
     
    If foundIndex <> -1 Then
        MsgBox "Chaîne trouvée à l'index " & foundIndex
    Else
        MsgBox "Chaîne non trouvée"
    End If

  3. #3
    Membre averti Avatar de Nain porte koi
    Homme Profil pro
    a
    Inscrit en
    Novembre 2023
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : a

    Informations forums :
    Inscription : Novembre 2023
    Messages : 313
    Points : 427
    Points
    427
    Par défaut
    Juste une interrogation, si "les deux chaines doivent être de la même taille" pourquoi utiliser InStr et pas directement avec une égalité ?

    si je reprend le code de licardentaistor ça donnerait ceci
    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
    Dim i As Integer
    Dim foundIndex As Integer
    Dim searchString As String
    Dim tableau(1 To 44) As String
     
    ' Initialisation du tableau (exemple)
    tableau(1) = "4/12/4"
    tableau(6) = "4/18/4"
    tableau(33) = "44.2/16/44.2"
    tableau(44) = "44.2/16/4"
     
    searchString = "44.2/16/4"
    foundIndex = -1
     
    i = 1
    Do While i <= UBound(tableau)
        If tableau(i) = searchString Then
            foundIndex = i
            Exit Do
        End If
        i = i + 1
    Loop
     
    If foundIndex <> -1 Then
        MsgBox "Chaîne trouvée à l'index " & foundIndex
    Else
        MsgBox "Chaîne non trouvée"
    End If
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  4. #4
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 343
    Points : 493
    Points
    493
    Par défaut
    c'est juste en effet...

  5. #5
    Membre actif Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 398
    Points : 203
    Points
    203
    Par défaut
    Bonjour à la communauté, et aux aidants ! !
    Très joli vos codes, et très élégants...
    (la beauté de vos codes aide à la pédagogie).
    Après une première lecture (sans pouvoir tester), je suis certain que ça va fonctionner...
    Un super très grand merci à vous deux...
    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  6. #6
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 816
    Points : 2 954
    Points
    2 954
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    J'ajouterai que, si ton tableau contient moins de 65536 valeurs, alors tu peux te passer de la boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim index As Long
    Dim Tableau(1 To 44) As String
    Tableau(1) = "4/12/4"
    Tableau(2) = "..."
    Tableau(6) = "4/18/4"
    Tableau(22) = "...."
    Tableau(33) = "44.2/16/44.2"
    Tableau(44) = "44.2/16/4"
    index = Application.WorksheetFunction.Match("44.2/16/4", Tableau, 0)
    MsgBox index
    Cordialement,
    Franck

Discussions similaires

  1. Effacer des répertoires dont le path est trop long
    Par thetraveller dans le forum Windows XP
    Réponses: 5
    Dernier message: 21/05/2007, 10h35
  2. Retour a la ligne dans un textarea quand le mot est trop long
    Par avogadro dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/11/2006, 15h35
  3. [VB6]Message d'erreur si le temps d'exécution est trop long
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 14/09/2006, 16h43
  4. 3047 - L'enregistrement est trop long ??????
    Par jbaudin dans le forum Access
    Réponses: 4
    Dernier message: 15/11/2005, 11h29
  5. Réponses: 1
    Dernier message: 19/09/2005, 15h44

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