XL 2010 tableau vba

eric232

XLDnaute Nouveau
Bonjour,
Est-il possible de simplifier ce code ?
For i = 14 To 20
Columns(i).Select
Selection.TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
Next i
For i = 22 To 27
Columns(i).Select
Selection.TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
Next i
For i = 29 To 34
Columns(i).Select
Selection.TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
Next i
For i = 36 To 41
Columns(i).Select
Selection.TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
Next i
etc
etc...
Je n'ai pas trouvé ou pas compris les réponses dans google
Merci
 

natorp

XLDnaute Accro
Bjr Eric

comme ça ?
Code:
For i = 14 To 41
If i <> 21 or i <> 28 or i <> 35 Then
Columns(i).Select
Selection.TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
End If
Next i

Cordialement, Gérard
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Eric232,

La première boucle étant, me semble-t-il différentes des suivantes, une proposition à tout haard:
VB:
Sub test()
' bornes de la première boucle, numéro de colonne finale
Const debutPrem = 14, finprem = 20, Dercol = 146
Dim j&, j1&, j2&

  'première boucle
  j1 = debutPrem: j2 = finprem
  For j = j1 To j2
    Columns(j).TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
  Next j
 
  'boucles suivantes
  j1 = j2 + 2: j2 = j1 + 5
  Do While j1 <= Dercol
    For j = j1 To j2
      Columns(j).TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
    Next j
    j1 = j2 + 2: j2 = j1 + 5
  Loop
End Sub
 

eric232

XLDnaute Nouveau
OK, merci
Je vais faire avec, mais en réalité c'est plus compliqué que ça
au lieu de :
For i = 14 To 20
For i = 22 To 27
ça peut être n'importe quoi, il n'y pas toujours 5 ou 6 colonnes à traiter séparés par une colonne à ne pas traiter, ça peut être :
For i = 11 To 20
For i = 24 To 27
etc...

Pour natorp, c'est and et non pas or
i <> 21 and i <> 28
or c'est lorsqu'il y a égalité : i = 21 or i = 28
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Si les bornes des boucles ne sont pas prévisibles, on peut les indiquer dans la constante BornesFor .
Il faut respecter la syntaxe suivante:

  • les bornes inf et sup d'une même boucle sont séparées par une virgule (sans espace ni avant ni après la virgule)
  • les bornes d'une boucle sont séparées de la précédente par un seul espace

Le fichier joint est un exemple de ce que ça peut produire.


Le code est dans le module de la feuille Feuil1 :
VB:
Sub Boucle()
' bornes inf et sup de chaque boucle
Const BornesFor = "5,7 11,20 24,27 30,37 39,42 44,44"
Dim Bornes, couple, j&

Rows(1).ClearContents   '---- pour le test

  Application.ScreenUpdating = False
  Bornes = Split(BornesFor)
  For Each couple In Bornes
    For j = Split(couple, ",")(0) To Split(couple, ",")(1)
      'Columns(j).TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
      Cells(1, j) = j   '---- pour le test
    Next j
  Next couple
End Sub
 

Pièces jointes

  • eric232- boucles à bornes variables- v1.xlsm
    14.8 KB · Affichages: 37
Dernière édition:

Discussions similaires

Réponses
2
Affichages
226
Réponses
4
Affichages
205

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16