Excel VBA - Erreur 400 du à un "-"

Bonjour tout le monde,

Mon problème a lieu dans excel.
J’ai écrit un code qui fonctionne très bien, sauf quant ma variable possède un trait d’union :

Code :

Sub creer_listecat(categorie As String, Feuil As String)

Dim coll, rowl, colli, rowli, colc, rowc, colci, rowci As Integer

coll = 1 'Colonne de départ de la liste de compte BDD
rowl = 2 'Ligne de départ de la liste de compte BDD
colli = coll 'Colonne actuelle de la liste de compte BDD
rowli = rowl 'Ligne actuelle de la liste de compte BDD

colc = 1 'Colonne de départ de la liste de compte par catégorie
rowc = 1 'Ligne de départ de la liste de compte par catégorie
colci = colc 'Colonne actuelle de la liste de compte par catégorie
rowci = rowc 'Ligne de départ de la liste de compte par catégorie

Worksheets(Feuil).Cells.ClearContents 'Efface le contenu de la feuille de compte par catégorie

'Création de l’en-tête de la section
Worksheets(Feuil).Cells(rowci, 1).Value = « Compte iCampus pour la catégorie Arts appliqués »
rowci = rowci + 1
Worksheets(Feuil).Cells(rowci, 1).Value = « Compte »
Worksheets(Feuil).Cells(rowci, 2).Value = « Mot Passe »
Worksheets(Feuil).Cells(rowci, 3).Value = « Nom, Prénom »
Worksheets(Feuil).Cells(rowci, 4).Value = « Date de remise »
rowci = rowci + 1

'Trouver première ligne catégorie
Do While Cells(rowli, colli + 6) <> categorie
rowli = rowli + 1
Loop

Do 'Tant que la ligne est de la catégorie
Worksheets(Feuil).Cells(rowci, 1).Value = Cells(rowli, colli)
Worksheets(Feuil).Cells(rowci, 2).Value = Cells(rowli, colli + 1)
rowci = rowci + 1
rowli = rowli + 1
Loop While Cells(rowli, colli + 6) = categorie

End Sub

Lorsque je fais : creer_listecat « Traduction Interprétariat », « Compte TI »
Tout fonctionne correctement.

Mais si je mets : creer_listecat « Traduction - Interprétariat », « Compte TI »
J’ai une erreur 400 sur le code :
Code :

Do While Cells(rowli, colli + 6) <> categorie
rowli = rowli + 1
Loop

Car il ne trouve jamais la correspondance, donc il tourne jusqu’à la fin de la feuille sans jamais rien trouvé.
J’ai beau copié/coller le « Traduction - Interprétariat » pour être certaine qu’il s’agit bien du même « - » partout, toujours erreur 400.

La solution simple est de ne pas mettre de « - », mais j’ai toute une liste de ce genre de thème qui officiellement doivent être inscrit avec un « - » dans mes fichiers… donc si la chose est possible, j’aimerais pouvoir le conserver.

Quelqu’un aurait-il une idée pour résoudre mon problème ?

D’avance un grand merci pour vos lumières. :slight_smile:

Tu as quelle version d’excel ?

Pour essayer de cerner le problème, modifie ton code de la façon suivante
Do 'Tant que la ligne est de la catégorie
Worksheets(Feuil).Cells(rowci, 1).Value = Cells(rowli, colli)
Worksheets(Feuil).Cells(rowci, 2).Value = Cells(rowli, colli + 1)
rowci = rowci + 1
rowli = rowli + 1
x = Cells(rowli, colli + 6)
Loop While Cells(rowli, colli + 6) = categorie

Ensuite, tu mets un point d’arrêt sur la dernière ligne, et tu examines à chaque passage la valeur de x.
Quand elle atteint la valeur de sortie, tu tapes dans la fenêtre d’exécution
? x = categorie

En principe, cela doit te retourner faux, puisque tu ne sors pas de la boucle.
Ensuite, tu regardes ce qui diffère dans les deux chaines :
D’abord la longueur
? len(x) = len(categorie)

puis caractère par caractère
? left(x,1) = left(categorie, 1)
? left(x,2) = left(categorie, 2)
? left(x,3) = left(categorie, 3)

Bonjour,

finalement, sur un autre forum, on m’a fournit une autre façon de codé ce que je désire faire tout en étant bien plus optimisé.
Et ça fonctionne sans problème avec les « - ».

Toutefois mon problème venait visiblement de mes variables. Je déclare categorie comme string, mais dans mon appelation c’était considéré comme un variant. Je savais pas qu’il fallait mettre le ‹ As string › sur toutes les variables et que le mettre seulement en fin de ligne ne fonctionne pas.

Merci tout de même pour ton aide :slight_smile: