Besoin d'aide pour une étape dans ma macro svp
RésoluBruno83200_6929 Messages postés 655 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
Windows / Chrome 138.0.0.0
- Freebox bloquée étape 2
- Supercopier 2 - Télécharger - Gestion de fichiers
- Mot de passe administrateur freebox ✓ - Forum Freebox
- Etape 7 freebox - Forum Freebox
- Mode sécurisé freebox - Forum Freebox
- Trouver le mdp administrateur freebox ? - Forum Freebox
6 réponses
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
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question