Tasser les cellules remplies dans les cellules vides sur la droite

Bonjour à tous,

Travaillant dans une société de routage (mise sous enveloppe et sous film plastique), je dois normaliser les bases de données (fichiers d'adresses) avant impression.

En gros, ça consiste à tout mettre en majuscule, enlever les accents, regrouper les "Civilité, nom, prénom" dans une seule colonne si tel est le cas, enlever les espaces superflus, vérifier que toutes les adresses sont complètes (qu'il ne manque pas un nom/adresse/code postal/ville), les retours chariots, etc.

Donc, je suis en train de faire des petites macros pour automatiser tout ça mais je me rends compte que c'est extrêmement lent donc si en passant, quelqu'un pouvait me dire comment optimiser les temps de traitement, ce serait sympa.

Et donc pour revenir au sujet, j'aurais besoin de "tasser" sur une même ligne les données vers la droite jusqu'à la colonne "code postal" mais je ne sais pas comment faire. il faudrait simplement sélectionner les colonnes à "tasser" et cliquer sur un bouton qui lancerait la macro.

Comme dit plus haut, je rencontre également d'autres soucis mais je me demande s'il faut créer d'autres sujets ou pas. Au cas où, je pose/repose mes questions ici :

  • Toutes les macros sont extrêmement lentes malgré les commandes "Application.ScreenUpdating = False & true"
  • J'ai un problème avec la macro "regroup" : elle me met "dépassement de capacité" s'il y a plus de 250 lignes, ce qui est peu en soit ?
  • En parlant de cette macro : comment l'améliorer en pouvant choisir les colonnes à regrouper ?

D'avance merci pour votre aide

Cdt

Thomas

Oups, j'ai oublié de mettre mon fichier.

Pour info, c'est la macro "décalage" que je souhaite utiliser pour tasser les cellules.

Et autre info, pour mes tests, j'ai scindé la macro "traitement" qui remplace tous les caractères et fait les abréviations en plusieurs plus petites (RemplacerCaractères, AbréviationCivilité et AbréviationAdresse) mais ça ne change pas grand chose, tout est toujours très lent.

Je me réponds à moi-même concernant les temps de traitement.

Je me suis rendu compte que les macros perdaient du temps quand la cellule était vide donc avec un simple "If Cell.value<>"" Then", les temps ont grandement étaient améliorés.

Je remets le fichier de ce fait

J'ai trouvé ce bout de code qui fait ce que je souhaite, par contre, je ne comprends absolument rien ....si quelqu'un pouvait m'expliquer

Sub decalage()
    'tasse les adresses sur la droite 

Dim X As Variant, Y As Variant, R As Range, T As String
Dim h As Integer, i As Integer, j As Integer, k As Integer, n As Integer

Set R = Application.Selection 'crée un tableau avec la sélection
X = R
n = UBound(X, 1): k = UBound(X, 2): i = k   
For h = 1 To n   
    For i = k To 2 Step -1     
        If X(h, i) = "" Or X(1, i) = Y Then    
            Do
                For j = i To 1 Step -1  
                      If X(h, j) <> "" Or X(h, j) <> Y Then Exit Do
                    Next j
                Exit For
            Loop Until True
                X(h, i) = X(h, j)
                X(h, j) = Y
        End If
    Next i
Next h

R = X

End Sub

Merci

Rechercher des sujets similaires à "tasser remplies vides droite"