A voir également:
- [VBA] Fonction InStr ne marche pas
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction filtre excel n'existe pas - Forum Excel
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- Vba attendre 1 seconde ✓ - Forum VB / VBA
4 réponses
Utilisateur anonyme
16 août 2012 à 13:55
16 août 2012 à 13:55
Bonjour
J'ai l'impression que tu as inversé les deux paramètres du InStr :
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
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.
(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 ?
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 ?
Utilisateur anonyme
16 août 2012 à 14:24
16 août 2012 à 14:24
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.
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.
Utilisateur anonyme
16 août 2012 à 17:05
16 août 2012 à 17:05
Bonjour,
Suggestion :
Cdt
Lupin
Suggestion :
If Not ((InStr(1, AllAuthors, "; " & LocalAuthors(i), vbTextCompare) > 0) Or _ (InStr(1, AllAuthors, LocalAuthors(i) & " ;", vbTextCompare) > 0)) Then End If
Cdt
Lupin