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 .....
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
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 :