Caractères spéciaux

Résolu
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

6 réponses

  1. Modérateur
    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 )
    1. 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
      1. Modérateur
        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...
    2. 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)
      1. Modérateur
        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...
        1. 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
          1. Modérateur
            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, "|")