Caractères spéciaux

Résolu
Bel_6625 Messages postés 18 Date d'inscription vendredi 3 septembre 2021 Statut Membre Dernière intervention 7 décembre 2021 - 29 oct. 2021 à 15:29
Bel_6625 Messages postés 18 Date d'inscription vendredi 3 septembre 2021 Statut Membre Dernière intervention 7 décembre 2021 - 2 nov. 2021 à 13:46
Bonjour,

J'aurai besoin de vos lumières :)

J'ai crée un dictionnaire VBA afin de prendre en compte plusieurs paramètres dans mon programme. Mais je me suis rendu compte que ce programme ne prenait pas en compte tous les caractères spéciaux de la chaine de caractère.

Exemple: au lieu d'écrire SDLB-Massy comme écrit dans la colonne de la base de données, le programme ne m'affiche que SDLB et il zappe la suite à partir du tiret.

Comment faire pour les prendre en compte ? Y'a t' un code pour ça?


Bien à vous

Configuration: Windows / Edge 93.0.961.47
A voir également:

6 réponses

jordane45 Messages postés 38472 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2025 4 745
29 oct. 2021 à 15:39
Bonjour,

Ne sachant rien du code que tu as réalisé .. ni de la structure de ton fichier .... il nous est impossible de te répondre.

Merci de déposer un fichier d'exemple via cijoint
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers

Et n'hésites pas à partager ton code directement sur le forum ( en prenant le soins d'utiliser les balises de code => Explications à lire entièrement, disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code )
0
Bel_6625 Messages postés 18 Date d'inscription vendredi 3 septembre 2021 Statut Membre Dernière intervention 7 décembre 2021
29 oct. 2021 à 15:50
Bonjour,

Ci joint le lien de mon code. Merci d'avance

https://www.cjoint.com/c/KJDnXdZUIYN

<config>Windows / Edge 93.0.961.47</config
0
jordane45 Messages postés 38472 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2025 4 745
29 oct. 2021 à 15:55
Tu n'as rien compris ....

Via le site cijoint .. tu nous partages un fichier contenant les données ...

Et DIRECTEMENT ici, via les BALISES DE CODE .. tu nous montres la partie de ton code qui te pose problème...
0
Bel_6625 Messages postés 18 Date d'inscription vendredi 3 septembre 2021 Statut Membre Dernière intervention 7 décembre 2021
29 oct. 2021 à 16:24
Merci

C'est donc le Key = ... "-" + RM.Cells(LigneRM, 28) qui contient des caractères spéciaux (tirets)



 For Each Wsname In wslistannee
    
        Set RM = Sheets(Wsname)
        NbLigneRM = RM.Cells(Rows.Count, 1).End(xlUp).Row
        LigneRM = 2
    
        Do While LigneRM <= NbLigneRM
            CodeDep = RM.Cells(LigneRM, 16)
            
            If CodeDep <> "GDI" Then
            
            
    'création de la concaténation des clés (contraintes)
    
                Key = RM.Cells(LigneRM, 5) + "-" + RM.Cells(LigneRM, 16) + "-" + RM.Cells(LigneRM, 22) + "-" + RM.Cells(LigneRM, 13) + "-" + RM.Cells(LigneRM, 28)
                
                MoisRM = CInt(Right(CStr(RM.Cells(LigneRM, 24).Value), 2))
                
    'Calcul somme annuelle
                
                If dict.Exists(Key) Then
                    SumAnnee = dict(Key)
                    SumAnnee(NumWS) = SumAnnee(NumWS) + RM.Cells(LigneRM, 26)
                    dict(Key) = SumAnnee
                    
    'Calcul somme cumulée
      
                    If MoisRM <= MoisMax Then
                        SumAnnee1 = dict1(Key)
                        SumAnnee1(NumWS) = SumAnnee1(NumWS) + RM.Cells(LigneRM, 26)
                        dict1(Key) = SumAnnee1
                    End If
                        
                Else
    'On remet les années à zéro à chaque fois poour ne pas qu'il ait de cumul de résultat à chaque fois
    'que l'on clique sur les boutons
      
                    ReDim SumAnnee(1 To 6)
                    SumAnnee(1) = 0
                    SumAnnee(2) = 0
                    SumAnnee(3) = 0
                    SumAnnee(4) = 0
                    SumAnnee(5) = 0
                    SumAnnee(6) = 0
                    
                    SumAnnee(NumWS) = RM.Cells(LigneRM, 26)
                    dict(Key) = SumAnnee
                    
                    ReDim SumAnnee1(1 To 6)
                    SumAnnee1(1) = 0
                    SumAnnee1(2) = 0
                    SumAnnee1(3) = 0
                    SumAnnee1(4) = 0
                    SumAnnee1(5) = 0
                    SumAnnee1(6) = 0
                    If MoisRM <= MoisMax Then
                        SumAnnee1(NumWS) = RM.Cells(LigneRM, 26)
                    End If
                    
                    dict1(Key) = SumAnnee1
               
                  End If
                
           End If
           LigneRM = LigneRM + 1
           
        Loop
        
        NumWS = NumWS + 1
        
    Next

    LigneRes = 7
                
    For Each Key1 In dict.Keys()
        
        
'Ecriture de résultats dans l'onglet "Resultats  par categorie"

        RCATD.Cells(LigneRes, 1) = Split(Key1, "-")(0)
        RCATD.Cells(LigneRes, 2) = Split(Key1, "-")(1)
        RCATD.Cells(LigneRes, 3) = Split(Key1, "-")(2)
        RCATD.Cells(LigneRes, 4) = Split(Key1, "-")(3)
        RCATD.Cells(LigneRes, 5) = Split(Key1, "-")(4)
0
jordane45 Messages postés 38472 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2025 4 745
29 oct. 2021 à 16:29
Bon..
vu que tu t'amuses à supprimer les messages et à en recréer.. ça va vite devenir le bazar...

Je te remet donc ma réponse ( qui a été supprimée en même temps que ton message précédent..)

Ton problème se trouve à ces lignes là non ?
  RCATD.Cells(LigneRes, 1) = Split(Key1, "-")(0)
        RCATD.Cells(LigneRes, 2) = Split(Key1, "-")(1)
        RCATD.Cells(LigneRes, 3) = Split(Key1, "-")(2)
        RCATD.Cells(LigneRes, 4) = Split(Key1, "-")(3)
        RCATD.Cells(LigneRes, 5) = Split(Key1, "-")(4)

Donc.. vu que tu "split"' sur le caractère "-" .. normal qu'il n'apparaisse plus ensuite...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bel_6625 Messages postés 18 Date d'inscription vendredi 3 septembre 2021 Statut Membre Dernière intervention 7 décembre 2021
2 nov. 2021 à 11:38
Bonjour @Jordane,

En effet, tu as raison. Je ne trouve pas de code qui me permet de prendre la dernière colonne du dictionnaire Key1 qui est: RM.cells(ligneRM, 28)

RCATD.Cells(LigneRes, 1) = Split(Key1, "-")(0)
        RCATD.Cells(LigneRes, 2) = Split(Key1, "-")(1)
        RCATD.Cells(LigneRes, 3) = Split(Key1, "-")(2)
        RCATD.Cells(LigneRes, 4) = Split(Key1, "-")(3)
        RCATD.Cells(LigneRes, 5) = Key1
0
jordane45 Messages postés 38472 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2025 4 745
Modifié le 2 nov. 2021 à 11:44
Si, dans tes variables, tu peux avoir le caractère "-" ... le mieux serait de ne pas utiliser ce caractère pour composer ta key

Key = RM.Cells(LigneRM, 5) + "-" + RM.Cells(LigneRM, 16) + "-" + RM.Cells(LigneRM, 22) + "-" + RM.Cells(LigneRM, 13) + "-" + RM.Cells(LigneRM, 28)
             

A la place, tu pourrais utiliser un caractère tel que le pipe "|"

Key = RM.Cells(LigneRM, 5) + "|" + RM.Cells(LigneRM, 16) + "|" + RM.Cells(LigneRM, 22) + "|" + RM.Cells(LigneRM, 13) + "|" + RM.Cells(LigneRM, 28) 

et donc spliter sur ce caractère ensuite
= Split(Key1, "|")
0
Bel_6625 Messages postés 18 Date d'inscription vendredi 3 septembre 2021 Statut Membre Dernière intervention 7 décembre 2021
2 nov. 2021 à 13:46
ça marche maintenant

Merci beaucoup :)
0