While Split sur 2007 > pas sur 2016

Bonjour,

Dans ce fil, https://forum.excel-pratique.com/viewtopic.php?f=2&t=60704&p=341374&hilit=d%C3%A9tecter+retour+%C3%A0+la+ligne#p341374

gmb nous a généreusement soumis une boucle pour décomposer plusieurs lignes d'une cellule

While Split(s, Chr(10))(i) <> ""

laquelle fonctionne bien sous Excel 2007, mais pas sous 2016.

Erreur d'exécution 9 ... l'indice n'appartient pas à la sélection.

Cette ligne bloque à la dernière valeur du " i " selon le nombre de lignes à traiter.

Cette boucle me conviendrait bien pour un projet si elle fonctionnait.

Pourquoi ne fonctionne-t-elle pas sous Excel 2016 ?

Merci de votre attention.

ric

9fabdu92-v1.xlsm (20.14 Ko)

Bonjour,

Pas sûr que ça fonctionne sur XL2016(que je ne possède pas), une version différente:

Sub Décomposer()
Dim T, i As Integer
    T = Split(Cells(1, 1), Chr(10))
    For i = LBound(T) To UBound(T)
        Cells(1, i + 2) = T(i)
    Next
End Sub

A+

Salut

Le code ne fonctionne pas aussi sur EXEL 2007 si on désactive le gestionnaire des erreurs

Sub Décomposer()

    s = Cells(1, 1)
    i = 0
 '   On Error GoTo fin
 tbl = Split(s, Chr(10))
 MsgBox UBound(tbl)
    Do While Split(s, Chr(10))(i) <> ""
        Cells(1, i + 2) = Split(s, Chr(10))(i)
        i = i + 1
    Loop 'While Split(s, Chr(10))(i) <> ""
'fin:
End Sub

Bonjour à tous,

Le code de AlgoPlus fonctionne bien sous Excel 2016 et il va convenir pour l'adapter à mon projet ... merci.

Entre temps, j'ai observé que si la Cells(1,1) contient un retour à la ligne à la toute fin, le code d'origine fonctionne sous Excel 2016 ... mais il bloque si à la toute fin de la cellule, c'est un mot.

A+

ric

Si la Cells(1,1) contient un retour à la ligne à la toute fin, le code proposé insère un "vide" en dernière cellule (donc efface cette cellule si elle n'était pas vide).

S'il y a des incidences on peut modifier:

.../...
    For i = LBound(T) To UBound(T)
        If T(i) <> "" Then Cells(1, i + 2) = T(i)
    Next
.../...

par contre si en cells(1,1) il y a un retour à la ligne en trop, il y aura un espace (cellule vide) entre deux valeurs copiées.

S'il n'en fallait pas, il faudrait rajouter un compteur incrémenté dans si T(i) <>"" et l'utiliser comme indice de colonne dans cells(1,i+2) = ... à la place de i+2

Rechercher des sujets similaires à "while split 2007 pas 2016"