Vba incrémentation

Résolu
Bonjour,

j'aimerais améliorer une macro en incrémentant les cellules concernant la concaténation de variables.
Voilà mon code :

Texte = ""

For Each Cellule In Range(Selection, Selection.Offset(0, 110))

If Cellule.Value <> "" Then
Texte = Texte & " " & Cellule.Value & ","
End If

Next Cellule

Cells(ActiveCell.Row, 121).Formula = Texte
'Passe à la ligne suivante
Selection.Offset(1, 0).Select

J'ai tout essayé, du Do en passant par for, rien n'y fait.
Pouvez-vous m'aider svp

3 réponses

  1. Contributeur
    Bonjour
    Excusez l'incruste

    Vu le nombre de cellule à traiter (110x 140 =15400), il est préférable de travailler en mémoire RAM avec des variables- tableaux et non sur la feuille pour effectuer les traitements (gain de temps considérable)

    proposition de macro
    Sub ecrire_texte()   
    Dim Lig As Integer, Col As Integer, Derlig As Integer   
    Dim T_in(), C_lig As Byte, C_col As Byte, T_out() 
    Dim Texte As String   
    
    'initialisations   
    Application.ScreenUpdating = False   
    Lig = ActiveCell.Row   
    Col = ActiveCell.Column   
    Derlig = Columns(Col).Find("*", , , , , xlPrevious).Row   
    T_in = Range(Cells(Lig, Col), Cells(Derlig, Col + 109)).Value   
    ReDim T_out(1 To Derlig - Lig + 1)   
    
    'traitement du texte en RAM   
    For C_lig = 1 To UBound(T_in)   
         Texte = ""   
         For C_col = 1 To 110   
              If T_in(C_lig, C_col) <> "" Then Texte = Texte & " " & T_in(C_lig, C_col) & ","   
         Next   
         ' données traitées   
         T_out(C_lig) = Texte   
    Next   
    
    'restitution   
    Cells(Lig, Col + 121).Resize(UBound(T_out), 1) = Application.Transpose(T_out)   
    End Sub   
    

    Michel
    1. Merci beaucoup Michel!!! le code est nikel, c'est exactement ce dont j'avais besoin =) You're a Geniuuus =)
  2. Est ce que tu as déclarer les variables texte, cellule...
    1. oui bien évidemment :

      Dim cellule As Range, Texte As String
      Dim i As Integer, J As Integer
      Dim observ As Double
    2. Ou se trouve exactement le problème?
    3. mon problème se situe au niveau de l'incrémentation, cad que la macro ci dessus ne permet pas de prendre en compte toutes les lignes et ne fonctionne que ligne par ligne. Ce qui est assez long lorsque j'ai 140 lignes. Voilà pourquoi je cherche à la modifier pour pouvoir exécuter qu'une seule fois la macro.
  3. Dim texte As String
    Dim a As Integer
    
    For a = 1 To 120
    If Cells(1, a) <> "" Then
    texte = texte & Cells(1, a).Value
    End If
    Next a
    
    Cells(2, 1) = texte