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. 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.
  2. 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
    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 =)