[VBA] Fonction InStr ne marche pas

Plow -  
 Utilisateur anonyme -
Bonjour à tous

J'ai créé une variable de type String dans laquelle je voudrais faire une recherche pour savoir si une valeur n'existe pas déjà. La voici :

While Sheets("Index").Range("E" & ILine) <> ""
    Range("G2").Value = ILine - 12
    
    LocalAuthors = Split(Sheets("Index").Range("E" & ILine), ", ")
    For i = 0 To (UBound(LocalAuthors) - LBound(LocalAuthors))
        If Not (InStr("; " & LocalAuthors(i), AllAuthors) Or InStr(LocalAuthors(i) & " ;", AllAuthors)) Then
            If AllAuthors = "" Then
                AllAuthors = LocalAuthors(i)
            Else
                AllAuthors = AllAuthors & " ; " & LocalAuthors(i)
            End If
            
            Range("G4").Value = Range("G4").Value + 1
        End If
    Next i
    ILine = ILine + 1
Wend


Visiblement, lorsque je fais un InStr dans AllAuthors (de type String) et que la valeur existe déjà, la condition sera toujours vrai. Que faire ?

Je vous remercie bien :)
A voir également:

4 réponses

Utilisateur anonyme
 
Bonjour

J'ai l'impression que tu as inversé les deux paramètres du InStr :
        If Not (InStr( AllAuthors, "; " & LocalAuthors(i)) Or InStr(  AllAuthors,LocalAuthors(i) & " ;")) Then
0
Plow
 
Bonjour.

Merci de ta réponse rapide, mais cela ne marche toujours pas. J'ai tenté autre chose (cette fois qui marche), mais c'est assez moche.

            'IsInside = True
            'For Each Author In Split(AllAuthors, " ; ")
            '    If Author = LocalAuthors(i) Then
            '        IsInside = False
            '    End If
            'Next Author
            'If IsInside And AllAuthors <> "" Then
            '    AllAuthors = AllAuthors & " ; " & LocalAuthors(i)
            '    Range("G4").Value = Range("G4").Value + 1
            'End If
            'If AllAuthors = "" Then
            '    AllAuthors = LocalAuthors(i)
            '    Range("G4").Value = Range("G4").Value + 1
            'End If

(commenté pour tester ta solution à côté). J'arrive avec ce code à 1080 résultats, avec l'autre à plus de 1300. Donc il y a bien un problème d'utilisation de InStr.

Une solution ?
0
Utilisateur anonyme
 
Tu trouves 1080 résultats dans un cas et 1300 dans l'autre, mais lequel des deux est exact ? Y en a-t-il seulement un des deux ? As'tu comparé les listes pour voir où était la différence, ça donnerait une idée.

Déjà, dans ton premier script, il y avait plusieurs incohérences :
- Tu utilises LocalAuthors(i) : ton i devrait donc aller de LBound(LocalAuthors) à UBound(LocalAuthors) et non pas de 0 à UBound(LocalAuthors)-LBound(LocalAuthors). Comme UBound(LocalAuthors) est probablement à 0, ça ne change peut-être pas grand chose
- Tu recherches LocalAuthors(i) accompagné d'un point virgule (avant ou après) dans AllAuthors. Mais le premier nom que tu ajoutes n'est pas suivi d'un point virgule. S'il apparaît deux fois de suite, il sera mis deux fois dans AllAuthors.
Mais ces détails n'expliquent pas ton écart 1080/1300.
0
Utilisateur anonyme
 
Bonjour,

Suggestion :

    If Not ((InStr(1, AllAuthors, "; " & LocalAuthors(i), vbTextCompare) > 0) Or _
            (InStr(1, AllAuthors, LocalAuthors(i) & " ;", vbTextCompare) > 0)) Then
    End If


Cdt

Lupin
0