DanB34
XLDnaute Nouveau
Bonjour,
Je reçois fréquemment de gros fichiers, issus de différentes bases de données et contenant parfois des caractères non conformes. Pour gagner beaucoup de temps, je voudrais supprimer des caractères invisibles contenus dans des cellules en effectuant le traitement dans une variable tableau.
Actuellement la macro passe par une boucle qui effectue le traitement directement sur la feuille de données, cellule par cellule.
Je cherche à :
- charger les données dans une variable tableau (ça c'est fait).
- tester les données contenues dans ce tableau (pas fait !) -> s'il y a des caractères invisibles les supprimer.
- recopier le tableau sur la feuille après traitement.
J'ai joint un fichier ex. avec macros dont une permettant après traitement de restaurer les données avec les cellules contenant des caractères invisibles.
Merci d'avance pour votre aide et idées
Bien cordialement,
Dan
Je reçois fréquemment de gros fichiers, issus de différentes bases de données et contenant parfois des caractères non conformes. Pour gagner beaucoup de temps, je voudrais supprimer des caractères invisibles contenus dans des cellules en effectuant le traitement dans une variable tableau.
Actuellement la macro passe par une boucle qui effectue le traitement directement sur la feuille de données, cellule par cellule.
Je cherche à :
- charger les données dans une variable tableau (ça c'est fait).
- tester les données contenues dans ce tableau (pas fait !) -> s'il y a des caractères invisibles les supprimer.
- recopier le tableau sur la feuille après traitement.
J'ai joint un fichier ex. avec macros dont une permettant après traitement de restaurer les données avec les cellules contenant des caractères invisibles.
Merci d'avance pour votre aide et idées
Bien cordialement,
Dan
VB:
Option Explicit
Sub Nettoyage_Cellules_Vides_Tableau_Complet()
Dim Tablo As Variant
Dim WsD As Worksheet
Dim Lig As Long, LigDer As Long, LigNb As Long, Cpt As Long
Dim Col As Integer, LigDep As Integer, ColDep As Integer, ColDer As Integer, ColNb As Integer
Dim CelDep As String, CelArv As String
Dim ColDepL As String, ColArvL As String, ColDerL As String
Dim C As Range
Dim x As String
Dim rep As String
Set WsD = Sheets("Donnees")
WsD.Select
LigDep = 13 'Range("A1").End(xlDown).Row
'LigDer = WsL.Range("A1048576").End(xlUp).Row
LigDer = WsD.Range("B" & Rows.Count).End(xlUp).Row
ColDep = 2
ColDepL = "B"
ColDer = Rows(12).Find("*", , , , xlByRows, xlPrevious).Column
ColDerL = ColLettre(ColDer)
ColNb = ActiveSheet.UsedRange.Columns.Count 'Compte toutes les colonnes occupées sur la feuille
LigNb = ActiveSheet.UsedRange.Rows.Count 'Compte toutes les lignes occupées sur la feuille
ColDer = Cells(12, Columns.Count).End(xlToLeft).Column 'n° de la dernière colonne non vide de la ligne 1
ColNb = ColDer - (ColDep - 1) '-1 afin d'avoir toutes les colonnes (si le tableau commence col A (1) et qu'il s'arrête col M (13) il y a 13 - (1 - 1) = 13 col remplies
CelDep = Range(ColDepL & LigDep).Address
CelArv = Range(ColDerL & LigDer).Address
'Sélection du tableau en 1 fois
Tablo = Range(CelDep & ":" & CelArv).Value
Cpt = 0
For Each C In Range(CelDep & ":" & CelArv).SpecialCells(xlCellTypeConstants)
If C.Text = "" Then
x = C.Address
Cpt = Cpt + 1
'C.Value = Empty 'commenté pour test
End If
Next
'Partie ajoutée afin de pouvoir tester
If Cpt = 0 Then
MsgBox "Il n'y a aucune cellule contenant des caractères invisibles"
End
End If
rep = MsgBox("Il y a " & Cpt & " caractères non visibles" & vbLf & "Voulez-vous les supprimer ?" & vbCrLf, vbYesNo + vbQuestion, "Réponse...")
If rep = 7 Then
End
Else
For Each C In Range(CelDep & ":" & CelArv).SpecialCells(xlCellTypeConstants)
If C.Text = "" Then
x = C.Address
C.Value = Empty
End If
Next
End If
Range("A1").Select
End Sub
Sub Restaure()
'Recopie des données de la feuille Copie sur la feuille Donnees pour relancer le test
Dim WsD As Worksheet
Dim WsC As Worksheet
Set WsD = Sheets("Donnees")
Set WsC = Sheets("Copie")
WsD.Range("B12:P151").Value = WsC.Range("B12:P151").Value
End Sub
Function ColLettre(Col)
ColLettre = Split(Cells(1, Col).Address, "$")(1)
'ColFinLettre = ColLettre
End Function
Pièces jointes
Dernière édition: