Boucle - Ajouter des caractères sur 54 colonnes

Bonsoir à tous,

Je travaille sur un fichier excel dont 54 colonnes représentent des données toutes différentes : nom, prénom, code postal, ect...

Ces données doivent respecter un certain nombre de caractères obligatoires, par exemple le prénom jusqu'à 35 caractères sinon, il faut ajouter des espaces pour faire ces 35 caractères.

(ces colonnes sont ensuite envoyées vers un fichier txt.)

J'ai réussi à faire en sorte, par une boucle que si les données n'ont pas 35 caractères, ajouter des espaces :

Sub Ajouterespaces6()
'
'--- recherche nb lignes
'
i = 3
While Cells(i, 1) <> ""
i = i + 1
Wend
imax = i - 1
'
'--- recherche nb colonnes
'
j = 1
While Cells(2, j) <> ""
j = j + 1
Wend
jmax = j - 1

'selectionner l'onglet'

Sheets("Données globales").Select
For j = 1 To jmax

For i = 3 To imax

'Si le nombre de caratcères de ces rangées < à 35 alors'

If Len(Cells(i, j) < 35) Then

For k = Len(cell) To 35
Cells(i, j) = Cells(i, j) & "R"
Next

End If

Next
Next
End Sub

Là ou je bloque est que j'ai 54 colonnes, des longueurs de caractères toutes différentes à imposer... Je ne trouve pas la solution et du coup je me demande si la boucle est pertinente....

Auriez-vous une solution à me proposer? des idées?

Merci beaucoup par avance de votre aide.

Bonne soirée.

Cindy

Bonjour

A tester

Option Explicit

Sub Ajouterespaces6()
Dim J As Long, NbLig As Long
Dim I As Integer, NbCol As Integer

  Application.ScreenUpdating = False
  '--- recherche nb lignes
  NbLig = Range("A" & Rows.Count).End(xlUp).Row
  '--- recherche nb colonnes
  NbCol = Cells(2, Columns.Count).End(xlToLeft).Column

  'selectionner l'onglet'
  With Sheets("Données globales")
    For J = 3 To NbLig
      For I = 1 To NbCol
        .Cells(J, I) = Left(.Cells(J, I) & Space(35), 35)
      Next I
    Next J
  End With
End Sub

Bonjour,

Avec un fichier ça aurait été mieux.

Autre méthode à adapter :

Dim nbCar As Variant, test As String, col As Long
nbCar = Array(10, 35, 12, 25) ' nombre de caractères selon la colonne, indice commence à 0
test = "bonjour"
col = 1
test = Left(test & Space(nbCar(col)), nbCar(col))
Debug.Print test & "/" & Len(test)

La taille de chaque colonne est indiquée dans un array.

Boucler sur les lignes/colonne, on ajoute le nombre d'espace selon la colonne du mot et on en prend la partie gauche.

eric

Bonsoir,

j'ai ajouté le fichier : le formulaire de saisie permet l'inscription des données, qui doivent respecter un certain nombre de caractères (visibles dans l'onglet "nombre de caractères").

@Eriic :

nbCar = Array(10, 35, 12, 25)

=> je dois le faire pour autant de colonnes avec les différents nombres de caractères?

@Banzai : je teste ta solution, je te tiens au courant.

Merci beaucoup à tous les deux.

Bonsoir,

@Eriic :

=> je dois le faire pour autant de colonnes avec les différents nombres de caractères?

Oui, mais comme tu l'as mis sur une feuille on peut récupérer là :

Sub formaterDatas()
    Dim lig As Long, derlig As Long, col As Long, nbCar As Variant
    Dim data As Variant
    nbCar = Worksheets("Nombre caractères").[A2:BA2]
    derlig = Cells(Rows.Count, "A").End(xlUp).Row
    Application.ScreenUpdating = False
    If derlig > 2 Then
        For lig = 3 To derlig
            data = Cells(lig, 1).Resize(, 53)
            For col = 1 To 53
                data(1, col) = Left(data(1, col) & Space(nbCar(1, col)), nbCar(1, col))
            Next col
            Cells(lig, 1).Resize(, 53) = data
        Next lig
    End If
    Application.ScreenUpdating = True
End Sub

eric

de rien...

Bonjour à tous,

Merci beaucoup pour l'aide apportée : cela fonctionne très bien avec la dernière solution.

J'ai été un peu longue à remercier car je ne me suis pas mise à 100% dessus tout suite...

Il ne reste qu'un problème persistant, c'est que pour les données numériques les espaces ne s'ajoutent pas... Je recherche une solution.

Merci bcp encore.

Bonjour,

mettre les colonnes au format texte ne suffit pas ?

Sans tester :

            For col = 1 To 53
                data(1, col) = [b]cstr[/b](Left(data(1, col) & Space(nbCar(1, col)), nbCar(1, col)))
            Next col

eric

Rechercher des sujets similaires à "boucle ajouter caracteres colonnes"