Caractères spéciaux

Résolu
Bel_6625 Messages postés 19 Statut Membre -  
Bel_6625 Messages postés 19 Statut Membre -
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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
  2. Bel_6625 Messages postés 19 Statut Membre
     
    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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
  3. Bel_6625 Messages postés 19 Statut Membre
     
    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
  4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Bel_6625 Messages postés 19 Statut Membre
     
    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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
  7. Bel_6625 Messages postés 19 Statut Membre
     
    ça marche maintenant

    Merci beaucoup :)
    0