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: