Bonjour le Forum,
La lecture du post:
https://www.developpez.net/forums/d1...sieurs-lignes/
apporte une solution partielle à ma problématique :
https://www.developpez.net/forums/d1...l-exploitable/
Repartant donc de cette proposition, je souhaiterai l'étendre à plusieurs colonnes tout en gardant l'alignement original des données.
je pars d'un PDF, extrait en XLS via un site web gratuit. Je compte me servir des tableaux obtenus comme outil de veille réglementaire. Le point bloquant actuel est que les cellules de la colonne B et C sont fusionnées verticalement au petit bonheur, le texte contenu est renvoyé à la ligne sans changement de ligne sur Excel, ce qui m’empêche tout traitement des données de ligne unique!
Votre solution serait donc de repérer les "Retours Chariots" afin d'insérer les sauts de lignes utiles - j'ai testé sur une colonne et cela fonctionne bien ! Je souhaiterai que mon tableau se voie en quelque sorte "défusionné" et enfin exploitable!
Voici ou j'en suis rendu :
J'observe un décalage de 1 ligne entre la colonne B et la colonne 1 et encore 1 ligne entre la C et la B ... ? il doit s'agir d'une erreur de ma part. Puis des sauts de lignes coordonnés mais surnuméraires...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 Sub TestSpliterLesCellulesAvecRetourChariot() SpliterLesCellulesAvecRetourChariot Sheets("Source"), Sheets("Cible") End Sub Sub SpliterLesCellulesAvecRetourChariot(ByVal FeuilleSource As Worksheet, ByVal FeuilleCible As Worksheet) Dim RetoursChariots As Variant Dim I As Long, J As Long Dim PremiereLigneSource As Long, DerniereLigneSource As Long Dim LigneCible As Long With FeuilleCible LigneCible = .Cells(.Rows.Count, 2).End(xlUp).Row + 1 End With With FeuilleSource PremiereLigneSource = 1 DerniereLigneSource = .Cells(.Rows.Count, 2).End(xlUp).Row PremiereColonneSource = 1 DerniereColonneSource = 3 For I = PremiereLigneSource To DerniereLigneSource For K = PremiereColonneSource To DerniereColonneSource RetoursChariots = Split(.Cells(I, K), Chr(10)) If UBound(RetoursChariots) > 0 Then For J = LBound(RetoursChariots) To UBound(RetoursChariots) With FeuilleCible FeuilleCible.Cells(LigneCible, K) = Trim(RetoursChariots(J)) LigneCible = LigneCible + 1 End With Next J Else FeuilleCible.Cells(LigneCible, K) = Trim(.Cells(I, K)) LigneCible = LigneCible + 1 End If Next K Next I End With End Sub
D'autre part, mais cela vient probablement du fichier d'origine, certaines cellules en C ne sont pas en face de leurs sœurs en B (43 occurences). Mais ailleurs ça tombe juste... (32 occurences)?
fichier TEST:
TEST NOMENCLATURE.xlsm
Merci pour vos observation / conseils !
Partager