changer qqs milliers de cellules "rapidement"

sergio_bzh

XLDnaute Nouveau
Bonjour,

je cherche à modifier quelques milliers de cellules assez rapidement et à partir de VB6. Je veux simplement ajouter une quote devant la valeur de la cellule pour la forcer à être en mode texte.

Pour le moment je fais une boucle toute bête :

Code:
    Dim Wsh As Excel.Worksheet
    .... 
    j = 2
    cel = "dummy"
    While (cel <> "")
        cel = Wsh.Cells(j, 3).Value
        If IsNumeric(cel) Then
            Wsh.Cells(j, 3).Value = "'" & cel
        End If
        j = j + 1
    Wend

J'ai 3 à 4000 lignes et l'opération peut prendre jusqu'à 2 minutes si toutes les lignes doivent être modifiées.

Quelqu'un aurait-il une solution plus rapide ?


En fait, je suis obligé de faire cela pour préparer un transferSpreadSheet vers Access qui se passe mal. Dans mes champs on peut aussi bien trouver des valeurs "ABC" comme "34567827".
Le plus incroyable est que, si je ne fais rien, à l'arrivée dans ma table Access, le champ est bien du type "Texte" mais on voit qu'il a importé "34567827" comme "3.45679 E+008" sous forme texte !!!!!
Avec les simples quotes devant, je n'ai plus de problème mais vu le temps je dois trouver autre chose.
D'un TransferSpreadSheet qui dure moins d'une seconde, me voilà arrivé avec des traitements de quelques minutes .....

Merci.
Sergio
 

pierrejean

XLDnaute Barbatruc
Re : changer qqs milliers de cellules "rapidement"

bonjour sergio bzh

Teste cette macro

Code:
Application.ScreenUpdating = False
 Set plage = Range("B2:B" & Range("B65536").End(xlUp).Row)
 For Each cel In plage
   cel.Value = "'" & cel.Value
 Next cel
Application.ScreenUpdating = True

1,5 sec environ pour 25000 lignes chez moi
 

michel_m

XLDnaute Accro
Re : changer qqs milliers de cellules "rapidement"

Bonjour Sergio, Cher Pierre Jean,

Quasi instantané avec aussi 25000 lignes:
Code:
Sub mettre_en_texte()
Dim derlig As Long
derlig = Range("B65536").End(xlUp).Row
Range(Cells(2, 2), Cells(derlig, 2)).NumberFormat = "@"
End Sub
 

sergio_bzh

XLDnaute Nouveau
Re : changer qqs milliers de cellules "rapidement"

re-bonjour,

j'ai donc testé. Effectivement en VBA c'est très rapide mais je suis en VB6 et là c'est beaucoup plus lent ( une bonne dizaine de secondes).

Du coup j'ai inséré le code de la Macro dans la VBA excel puis je voudrais lancer l'éxécution de cette macro. Mais il subsiste un petit problème que vous suarez résoudre je suppose.

J'ai donc ajouté le code suivant VB6 pour insérer mon code VBA dans Excel :

Code:
    AddQuoteUVCode = "Sub AddSimpleQuoteToUV()"
    ' etc 
    With Wbk.VBProject.VBComponents(Sheets("Price_Catalogue").CodeName).CodeModule
        nextline = .CountOfLines + 1
        .InsertLines nextline, AddQuoteUVCode
    End With
    App.Run "AddSimpleQuoteToUV"

J'ai vérifié la macro en allant l'éxécuter directement sous Excel. Il n'y donc pas d'erreur de syntaxe mais en VB6 j'ai l'erreur :

Impossible de trouver la macro AddSimpleQuoteToUV

Que pourrait-il manquer ?

Merci.
Sergio
 

sergio_bzh

XLDnaute Nouveau
Re : changer qqs milliers de cellules "rapidement"

J'ai trouvé . Il faut insérer le code dans un module.

na pas écrire :
Code:
    With Wbk.VBProject.VBComponents(Sheets("Price_Catalogue").CodeName).CodeModule

Mais écrire :
Code:
    With Wbk.VBProject.VBComponents("Module1").CodeModule

Par contre, si "Module1" n'existe pas, ça plante. Je ne sais pas comment le créer ?
 

Statistiques des forums

Discussions
312 248
Messages
2 086 596
Membres
103 252
dernier inscrit
Ersar