Decomposer et verifier si chaine caractères trouvée
Bonjour
Dans la procédure ci dessous, la chaine est décomposée en 4 caractères, mises en cellules adjacentes, puis vérifiée si elle est trouvée
Si la chaine contient seulement trois des caractères, elle est considérée comme trouvée ?Tomates ,123 et cellule vide ajoutés manuellement dans cellules pour vérificationLes cellulles vides sont considérée comme trouvée ?
Sub DecomposeEtVerfier_2()
Dim originalString As String
Dim slice As String
Dim i As Integer
Dim cellIndex As Integer
Feuil1.Select
'Modifié pour avoir une celle reference de ligne,dans la procédure
lig = [A20].Row
' Initialiser la chaîne d'origine, cellIndex est un compteur
originalString = Range("A20").Value ' La chaîne est dans la cellule A10
cellIndex = 0 ' Index pour les cellules adjacentes
' Boucle pour décomposer la chaîne en tranches de 4 caractères
For i = 1 To Len(originalString) Step 4
slice = Mid(originalString, i, 4) ' Extraire une tranche de 4 caractères
Cells(lig, 2 + cellIndex).Value = slice ' Placer la tranche dans la cellule adjacente (B5, C5, D5, ...)
cellIndex = cellIndex + 1
Next i
' Vérifier si chaque tranche peut être trouvée dans la chaîne d'origine
' + j modifié en + j + 3 pour tenir tenir compte des cellules de vérification
For j = 0 To cellIndex - 1
slice = Cells(lig, 2 + j + 3).Value
If InStr(originalString, slice) > 0 Then
Cells(lig + 1, 2 + j + 3).Value = "Trouvé" ' Indiquer que la tranche est trouvée (ligne suivante)
Else
Cells(lig + 1, 2 + j + 3).Value = "Non trouvé"
End If
Next j
End Sub
merci
Edit modo : mis code VBA entre balises
semble avoir trouvé
If InStr(originalString, slice) > 0 And Len(slice) <> 0 And Len(slice) = 4 Then
Bonjour,
Tout d'abord un point : je ne suis pas sur d'avoir bien compris l'objectif final recherché. Je le précise car je pense qu'il y a moyen de faire plus simple.
Un point de logique : vérifier
And Len(slice) <> 0 And Len(slice) = 4Est inutile. Si la longueur = 4, alors elle est nécessairement différente de 0, et sinon, de toute façon vous aurez Faux puisque c'est un "And".
En d'autres termes, l'expression ci-dessous est parfaitement équivalente :
If InStr(originalString, slice) > 0 And Len(slice) = 4 ThenEnsuite je remarque un point sur ce dernier code et l'exemple ci-joint :
Dans l'exemple, le dernier segment de découpe ne contient que 1 caractère, donc il renverrai Faux meme si il est en réalité vérifié.
Je reviens donc sur ma question initiale : quel est l'objectif de ce code ? Car a-priori, si la chaine à vérifier est toujours issue de la chaine initiale.. quel intéret ? Evidemment qu'elle sera dedans. Et si ce n'est pas le cas, je pense qu'une présentation du problème est nécessaire.
Effectivement, pour "If InStr(originalString, slice) > 0 And Len(slice) = 4 Then", je me suis dis la même chose, après avoir envoyé le message.
Ne maitrisant pas toutes les erreurs, découlant des requêtes, j'essaie toujours de vérifier, ce qui es renvoyé
Destiné à être incluse dans une autre procédure, la chaine n'est pas toujours la même
merci d'avoir relevé ce point
Bonjour Hoareau,
Lorsque vous postez un code pensez à utiliser l'icone </> disponible dans la barre de menu en y collant le code dans la fenêtre. Ce sera plus lisible pour celui qui vous lit. J'ai corrigé votre premier post pour vous voyiez.
Autre point : J'ai remarqué que vous ne cloturez pas vos fils une fois que vous avez la solution recherchée
Pensez à
Vos fils encore ouverts --> https://forum.excel-pratique.com/membre/71403/sujets
Crdlt
Bonjour
Trouvé </> dans la barre, mais pas dans le code, de quel message ?
Comme vous avez pu le voir, je fais une demande, des fois deux, par an, par contre, je regarde souvent, cela fait des années que je suit le site qui m'as bien dépanné
Si les choses changent, je ne vois pas, je suis un adepte des choses simples, quand t-il y a trop de boutons, on ne les voit plus, comme sur le téléphone, sur la télé
Il sont sensés améliorer les choses, mais les compliquent
Combien de personnes utilisent, les fonctions de leur télé
Après les choses ont toujours deux côtés au moins, dans ce cas précis, celui qui envoie le message a besoin de simplicité, celui qui répond d'y voir clair, celui qui le gére des informations pour le gérer
Je ne suis pas de la génération des émoticons et autres, trop de loi tue la loi, sur le même principe, mais je comprend, que pour des raisons, de suivi, de statistiques, de lisibilité, ou autre, on aie besoin de précision.
Je vais regarder aujourdh'ui, demain, j'aurai oublié, c'est involontaire
Pour ce qui est de clore les messages, des fois, je me dis que quelqu'un d'autre, va ajouter quelque chose, après j'oublie
Quand j'envoie un message, deux choses ont de l'importance, ne pas me faire traiter d'impoli, donc, je mets d'abord, bonjour et merci, ma demande au milieu, et me faire comprendre, que, ce soit sur ce forum ou ailleurs.
Je me pose de temps en temps, la question , de quels domaines, professions, sont ces gens, qui répondent aux questions, pourtant dans des domaines très variés, et combien de temps, ils ont passés pour apprendre.
Je vais regarder ou est clôturer, la dernière fois, je l'avais trouvé
Bonjour
Comme vous avez pu le voir, je fais une demande, des fois deux, par an, par contre, je regarde souvent, cela fait des années que je suit le site qui m'as bien dépanné
Non je n'ai pas trop regardé de ce coté
Mais le site à changé depuis 3 ans ans.
Si cela vous intéresse voici un lien qui donne quelques indications --> https://forum.excel-pratique.com/forum/infos-fonctionnalites-sur-le-nouveau-forum-139662
Quand j'envoie un message, deux choses ont de l'importance, ne pas me faire traiter d'impoli, donc, je mets d'abord, bonjour et merci, ma demande au milieu, et me faire comprendre, que, ce soit sur ce forum ou ailleurs.
Oui j'ai vu. C'est tout à votre honneur et certainement apprécié par ceux qui répondent
Je me pose de temps en temps, la question , de quels domaines, professions, sont ces gens, qui répondent aux questions, pourtant dans des domaines très variés, et combien de temps, ils ont passés pour apprendre.
Oui exact. Libre à chacun mais dans le profil de compte du membre il existe une rubrique dédiée à cela. Toutefois il est vrai que très souvent elle n'est pas complétée.
Je vais regarder ou est clôturer, la dernière fois, je l'avais trouvé
C'est ici et disponible dans tous les posts des membres qui vous ont répondu
Sachez que mon intervention n'était pas de vous reprocher quoi que ce soit mais simplement de vous faire part des fonctionnalités disponibles.
Cordialement