Besoin d'aide pour une étape dans ma macro svp

Résolu
Ju@nita Messages postés 163 Date d'inscription   Statut Membre Dernière intervention   -  
Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

À chaque mois, pour plusieurs clients, on reçoit une sorte de relevé en pdf qu'on doit convertir en excel puis le manipuler dans le but de l'exporter dans un programme de comptabilité. Et on a beaucoup de clients pour qui on fait ça. Donc, je veux monter une macro pour toutes les étapes d'excel qui prennent du temps.

Je ne peux pas vous donner le pdf original puisqu'il contient des renseignements confidentiels. C'est pour ça que j'ai préparé un exemple pour une des étapes dont j'ai aucune idée comment faire.

Comme je n'arrive pas à joindre un fichier excel, j'ai donc dû faire une capture d'écran et vous joindre le jpg que vous pourrez convertir en pdf puis en excel. En espérant que ça fonctionne.

Donc, pour les zones que j'ai mises en jaune, on voit que le texte apparaît sur deux lignes à l'intérieur de la même cellule, comme s'il y avait eu un "ALT-ENTER". C'est comme ça dans le relevé original et c'est ainsi que ça s'affiche rendu dans excel. Quand on a terminé de travailler notre fichier normal, on doit l'exporter dans un programme et ça ne fonctionne pas s'il y a du texte comme ça. Pour le moment, on fait tout à la main et c'est long car on peut avoir facilement plus d'une centaine de lignes et ça, pour plusieurs clients. Et même en élargissant la colonne, ça ne ramène pas le texte. Comment puis-je éliminer ça dans une macro svp ?

merci pour votre aide

fichier test pour macro


Windows / Chrome 138.0.0.0

6 réponses

  1. Ju@nita Messages postés 163 Date d'inscription   Statut Membre Dernière intervention   2
     

    ok tout fonctionne. merci

    1
  2. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    C'est moi, ou le lien est inactif ?

    Daniel


    0
  3. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
     

    Bonjour,

    Je ne sais pas si c'est ce que vous attendez, mais essayez et dites moi.

    Sub SupprimerSautsLigne()
        
        ' Déclarer les variables
        Dim ws As Worksheet
        Dim rng As Range
        Dim cell As Range
        Dim texte As String
        
        ' Définir la feuille active
        Set ws = ActiveSheet
        
        ' Option 1: Traiter toute la feuille utilisée
        Set rng = ws.UsedRange
        
        ' Option 2: Si vous voulez traiter seulement une plage spécifique, 
        ' décommentez la ligne suivante et ajustez la plage selon vos besoins
        ' Set rng = ws.Range("A1:F100")
        
        ' Option 3: Si vous voulez traiter seulement la sélection actuelle
        ' Set rng = Selection
        
        ' Désactiver les calculs automatiques pour accélérer le processus
        Application.Calculation = xlCalculationManual
        Application.ScreenUpdating = False
        
        ' Parcourir chaque cellule de la plage
        For Each cell In rng
            If Not IsEmpty(cell) Then
                texte = cell.Value
                
                ' Vérifier s'il y a des sauts de ligne (Chr(10) = saut de ligne)
                If InStr(texte, Chr(10)) > 0 Then
                    ' Remplacer les sauts de ligne par des espaces
                    texte = Replace(texte, Chr(10), " ")
                    
                    ' Optionnel: Remplacer les espaces multiples par un seul espace
                    Do While InStr(texte, "  ") > 0
                        texte = Replace(texte, "  ", " ")
                    Loop
                    
                    ' Optionnel: Supprimer les espaces en début et fin
                    texte = Trim(texte)
                    
                    ' Remettre le texte modifié dans la cellule
                    cell.Value = texte
                End If
            End If
        Next cell
        
        ' Réactiver les calculs automatiques
        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
        
        ' Message de confirmation
        MsgBox "Les sauts de ligne ont été supprimés avec succès!", vbInformation, "Traitement terminé"
        
    End Sub
    
    ' Macro alternative plus rapide utilisant Find & Replace
    Sub SupprimerSautsLigneRapide()
        
        Dim ws As Worksheet
        Dim rng As Range
        
        Set ws = ActiveSheet
        Set rng = ws.UsedRange
        
        ' Utiliser Find & Replace pour remplacer tous les sauts de ligne
        ' Chr(10) représente le saut de ligne (Alt+Enter)
        rng.Replace What:=Chr(10), Replacement:=" ", LookAt:=xlPart, _
                   SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                   ReplaceFormat:=False
        
        ' Optionnel: Supprimer les espaces multiples
        rng.Replace What:="  ", Replacement:=" ", LookAt:=xlPart, _
                   SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                   ReplaceFormat:=False
        
        MsgBox "Les sauts de ligne ont été supprimés rapidement!", vbInformation, "Traitement terminé"
        
    End Sub
    
    ' Macro pour traiter seulement une colonne spécifique
    Sub SupprimerSautsLigneColonne()
        
        Dim ws As Worksheet
        Dim rng As Range
        Dim colonne As String
        
        Set ws = ActiveSheet
        
        ' Demander à l'utilisateur quelle colonne traiter
        colonne = InputBox("Entrez la lettre de la colonne à traiter (ex: A, B, C...):", "Colonne à traiter", "A")
        
        If colonne <> "" Then
            ' Déterminer la dernière ligne utilisée dans cette colonne
            Dim derniereLigne As Long
            derniereLigne = ws.Cells(ws.Rows.Count, colonne).End(xlUp).Row
            
            ' Définir la plage à traiter
            Set rng = ws.Range(colonne & "1:" & colonne & derniereLigne)
            
            ' Supprimer les sauts de ligne
            rng.Replace What:=Chr(10), Replacement:=" ", LookAt:=xlPart, _
                       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                       ReplaceFormat:=False
            
            MsgBox "Les sauts de ligne ont été supprimés de la colonne " & colonne & "!", vbInformation, "Traitement terminé"
        End If
        
    End Sub

    0
    1. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
       

      Faites votre choix parmi les Macros proposées ci-dessus.

      0
  4. Ju@nita Messages postés 163 Date d'inscription   Statut Membre Dernière intervention   2
     

    Wow, il y a trop de stock pour moi, vous m'avez perdu. Je ne suis pas si calée en macro. Mais de ce que je peux comprendre, ça prend le numéro de la colonne dans laquelle éliminer les saut de ligne. Ça va de soi. C'est la colonne C.

    Et c'est vraiment l'option de supprimer les saut de ligne qui m'intéresse. Et le fait que d'un client à l'autre, le nombre de ligne va changer.

    Pouvez-vous me copier juste le nécessaire svp ? Sinon je ne sais pas à partir d'où copier votre macro.

    Merci pour votre patience.

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

    Posez votre question
  6. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    Une autre façon :

    Sub RemplacerALTENTER()
      Cells.Replace Chr(10), " "
    End Sub
    

    Daniel


    0
  7. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
     

    Si tu veux limiter à la colonne C :

    Sub RemplacerALTENTER()
      Columns(3).Replace Chr(10), " "
    End Sub
    

    Daniel


    0