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

Résolu
Ju@nita Messages postés 170 Statut Membre -  
Bruno83200_6929 Messages postés 650 Statut Membre -

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

Ju@nita Messages postés 170 Statut Membre 2
 

ok tout fonctionne. merci

1
danielc0 Messages postés 1938 Statut Membre 237
 

Bonjour,

C'est moi, ou le lien est inactif ?

Daniel


0
Bruno83200_6929 Messages postés 650 Statut Membre 150
 

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
Bruno83200_6929 Messages postés 650 Statut Membre 150
 

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

0
Ju@nita Messages postés 170 Statut Membre 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

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

Posez votre question
danielc0 Messages postés 1938 Statut Membre 237
 

Une autre façon :

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

Daniel


0
danielc0 Messages postés 1938 Statut Membre 237
 

Si tu veux limiter à la colonne C :

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

Daniel


0