Excel : pas de majuscules accentuées

Résolu
Anne88 Messages postés 191 Statut Membre -  
 nacer -
Bonsoir,

Je dois transformer en majuscules assez rapidement et de manière aussi simple que possible un tableau Excel avec pas loin de 45000 lignes et 10 colonnes avec du texte en majuscules et en minuscules.

Pour transformer mon texte automatiquement tout en majuscules, j'utilise la fonction =MAJUSCULE(réf de la cellule). Tout fonctionne bien jusque là.

Seulement, je me retrouve avec des caractères en majuscules qui sont accentués. Comme ce fichier, je dois ensuite le basculer sur ma base de données sur AS400 après l'avoir enregistré en format .txt, et que l'AS400 ne gère pas les majuscules, tous les articles avec une accentuation sortent en erreur après transfert.

Existe-t'il une solution pour que les caratères majuscules accentués se transforment en majuscules non accentuées.

Si vous avez une solution, je suis preneuse... Merci d'avance.

Bonne soirée

4 réponses

  1. Utilisateur anonyme
     
    Bonjour,

    si vous avez quelques notions de VBA, voici une suggestion !

    j'ai codé une routine qui effectue le travail :-)

    Sub XfrAcc()
    
        Dim DonneeIn As Variant
        Dim Carac, DonneeOut As String
        Dim DebLig, FinLig, DebCol, FinCol As Long
        Dim BoucleLig, BoucleCol, Longueur, Cmpt As Long
        
        ' A tester d'abord sur votre environemment
        ' ensuite vous pourrez enlever le commentaire (')
        ' des deux lignes suivantes :
        'Application.ScreenUpdating = False
        'Application.DisplayAlerts = False
        ' Équivalent en fin de routine pour remettre a True
        
        ' Tester sur une petite plage et ensuite
        ' modifier pour avoir toute la plage
        ' Définition de la plage a couvrir
        DebLig = 1: FinLig = 5
        DebCol = 1: FinCol = 5
        
        'Balayage des lignes
        For BoucleLig = DebLig To FinLig
            'Balayage des colonnes
            For BoucleCol = DebCol To FinCol
                DonneeIn = Cells(BoucleLig, BoucleCol).Value
                If DonneeIn <> "" Then
                    Longueur = Len(DonneeIn)
                    For Cmpt = 1 To Longueur
                        Carac = Mid(DonneeIn, Cmpt, 1)
                        Select Case (Carac)
                            Case "A" To "Z": DonneeOut = DonneeOut & Carac
                            Case "À", "Â", "Ä": DonneeOut = DonneeOut & "A"
                            Case "É", "È", "Ê", "Ë": DonneeOut = DonneeOut & "E"
                            Case "Î", "Ï": DonneeOut = DonneeOut & "I"
                            Case "Ô": DonneeOut = DonneeOut & "O"
                            Case "Û": DonneeOut = DonneeOut & "U"
                        End Select
                    Next Cmpt
                    Cells(BoucleLig, BoucleCol).Value = DonneeOut
                End If
            Next BoucleCol
        Next BoucleLig
    
        'Application.DisplayAlerts = true
        'Application.ScreenUpdating = true
    
    End Sub
    


    Lupin
    1
    1. Anne88 Messages postés 191 Statut Membre 36
       
      Coucou Lupin,

      Cool, ça avance, même si le résultat n'est pas à 100% ok chez moi. Ou j'ai merdé quelque part en copiant/collant ta routine, mais j'ai certaines parties de mots qui sont tronquées et les espaces entre les mots disparaissent.

      A la limite, demain car je n'ai pas d'exemple concret sous les yeux, (j'ai juste créé un petit tableau avec des caractères accentués) mais ce qui serait bien, c'est que je te montre de quoi je pars et ce à quoi je souhaiterais arriver. Comme tu me sembles connaitre très bien VBA, alors que moi pas du tout :(, tu me serais d'un grand secours, car d'ici quelques semaines je vais me retrouver avec des centaines de fichiers tarifs fournisseurs à rentrer dans mon as 400 et je me vois mal pour l'instant reprendre une à une les 630.000 références articles pour vérifier si il n'y a pas de caractères "interdits".

      Vu ce que tu as déjà fait, je pense qu'il ne faudrait pas grand chose à modifier, mais comme je patauge, je ne sais même pas quoi faire. Je vais quand même essayer de trouver des cours de VBA afin de comprendre quelque chose.

      Tu me dis ce que tu en penses.

      Bonne soirée
      0
    2. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
       
      Hello Anne et Lupin,

      Juste quelques ajustements mineurs, Lupin. J'ai mis en commentaires en bouts de lignes mes modifs (facile quand l'essentiel du boulot est déjà fait . T'as bien bossé).
      Manquait juste la réinitialisation de DonneeOut à chaque nouvelle cellule, et la prise en compte des autres caractères non majuscules éventuels.

      J'en profite pour relever une erreur que beaucoup font dans les définitions de variables. On peut en définir plusieurs dans un même "DIM", mais il faut répéter le "As" à chaque fois. Sinon, seule la dernière variable est correctement définie, et toutes les précédentes sont des Variants... Evidemment, ça marche, mais on appelle le semi-remorque pour trimballer les courses du supermarché :-)
      Sub XfrAcc()
      
        Dim DonneeIn As Variant
        Dim Carac As String, DonneeOut As String
        Dim BoucleLig As Long, BoucleCol As Long, Longueur As Long, Cmpt As Long
        Dim DerLig As Long, DerCol As Integer
        
        DerLig = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row     ' ligne la plus basse
        DerCol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column  ' colonne la plus à droite
        
        Application.ScreenUpdating = False
        
        'Balayage des lignes
        For BoucleLig = 1 To DerLig
          'Balayage des colonnes
          For BoucleCol = 1 To DerCol
            DonneeIn = Cells(BoucleLig, BoucleCol).Value
            DonneeOut = ""                                  ' réinitialisation à chaque cellule
            If DonneeIn <> "" Then
              Longueur = Len(DonneeIn)
              For Cmpt = 1 To Longueur
                Carac = Mid(DonneeIn, Cmpt, 1)
                Select Case (Carac)
                  Case "À", "Â", "Ä": DonneeOut = DonneeOut & "A"
                  Case "É", "È", "Ê", "Ë": DonneeOut = DonneeOut & "E"
                  Case "Î", "Ï": DonneeOut = DonneeOut & "I"
                  Case "Ô": DonneeOut = DonneeOut & "O"
                  Case "Û": DonneeOut = DonneeOut & "U"
                  Case Else: DonneeOut = DonneeOut & Carac  ' peut y avoir minuscules, chiffres, etc.
                End Select
              Next Cmpt
              Cells(BoucleLig, BoucleCol).Value = DonneeOut
            End If
          Next BoucleCol
        Next BoucleLig
      
        Application.ScreenUpdating = True
      
      End Sub
      
      0
    3. Anne88 Messages postés 191 Statut Membre 36
       
      Bonsoir vous 2,

      Si vous étiez à côté de moi, je vous sauterais au cou. C'est nickel. Ca fonctionne super bien.

      J'ai encore fait quelques modifications et du coup, je n'ai même plus besoin de passer par la fonction =MAJUSCULE(réf de la cellule).

      Je crois que maintenant, il faut que je trouve des cours de VBA sur le net pour pouvoir faire aussi bien que ce que vous avez fait, car malheureusement vous ne serez pas toujours derrière moi, et en voyant les possibilités, je suis sûre que je pourrai alléger mon travail grâce à VBA.

      Je vous envoie plein de bisous virtuels
      0
      1. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529 > Anne88 Messages postés 191 Statut Membre
         
        Merci, Anne.
        Bon week-end.
        0
    4. Utilisateur anonyme
       
      Bonjour Anne et Armojax,

      alors merci, ce fut un plaisir.

      @+
      Lupin
      0
  2. aranjuez31 Messages postés 8161 Date d'inscription   Statut Contributeur 354
     
    bsr
    les majuscules en "frenh' ne sont pas accentuées
    donc blem résolu !.....
    0
  3. Anne88 Messages postés 191 Statut Membre 36
     
    Merci Aranjuez31 pour ton aide, mais je ne vois pas à quoi correspond le "frenh'... C'est une police ?

    A plus
    0