Vba incrémentation

Résolu/Fermé
dolcevita01 - 20 juin 2012 à 15:54
dolcevita01 Messages postés 4 Date d'inscription vendredi 25 mai 2012 Statut Membre Dernière intervention 21 juin 2012 - 21 juin 2012 à 10:54
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

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 20/06/2012 à 18:14
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
dolcevita01 Messages postés 4 Date d'inscription vendredi 25 mai 2012 Statut Membre Dernière intervention 21 juin 2012
21 juin 2012 à 10:54
Merci beaucoup Michel!!! le code est nikel, c'est exactement ce dont j'avais besoin =) You're a Geniuuus =)
0
Christof422 Messages postés 867 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
20 juin 2012 à 16:15
Est ce que tu as déclarer les variables texte, cellule...
0
dolcevita01
20 juin 2012 à 16:16
oui bien évidemment :

Dim cellule As Range, Texte As String
Dim i As Integer, J As Integer
Dim observ As Double
0
Christof422 Messages postés 867 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
20 juin 2012 à 16:30
Ou se trouve exactement le problème?
0
dolcevita01
20 juin 2012 à 16:48
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.
0
Christof422 Messages postés 867 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 8 février 2015 212
20 juin 2012 à 17:00
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
0