Besoin d'aide pour une étape dans ma macro svp
RésoluBruno83200_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
Windows / Chrome 138.0.0.0
- Freebox bloquée étape 2
- Etape 7 freebox - Forum Freebox
- Mot de passe administrateur freebox ✓ - Forum Freebox
- Mode sécurisé freebox - Forum Freebox
- Trouver le mdp administrateur freebox ? - Forum Freebox
- Messagerie gmail bloquée - Guide
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