Je débute en VBA
Résolu
chnoir1
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
chnoir1 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
chnoir1 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Je débute en VBA
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
6 réponses
bonjour
essaies cette procédure: 10 000 lignes en env. 0,17 sec. (Ram: 512 mo, proc: 3 Ghz)
Michel
essaies cette procédure: 10 000 lignes en env. 0,17 sec. (Ram: 512 mo, proc: 3 Ghz)
Option Explicit
Option Base 1
Sub calculer_si()
Dim Derlig As Integer, Cptr As Integer
Dim Col_B(), Col_C()
Dim Constante As Double
Dim Start As Single
Start = Timer 'début chronometre
'---------------------initialisations
Application.ScreenUpdating = False
Constante = Range("B1")
Derlig = Columns("B").Find("*", , , , , xlPrevious).Row
'mise en mémoire Ram des colonnes source (B) et Cible (C)
Col_B = Application.Transpose(Range("B2:B" & Derlig).Value)
ReDim Col_C(Derlig - 1)
'---------------------calculs en ram
For Cptr = 1 To UBound(Col_B)
If Col_B(Cptr) <> 0 Then Col_C(Cptr) = Col_B(Cptr) - Constante
Next
'----------------------restitution
Range("C2").Resize(UBound(Col_C, 1)) = Application.Transpose(Col_C)
' ---------------------résultat durée de la procédure
Application.ScreenUpdating = True
MsgBox "colonne C calculée en " & Timer - Start & " secondes."
End Sub
Michel
Bonjour chnoir1,
Bonjour michel_m,
La procédure avec la recopie incrémentée ne semble pas moins rapide
A+
Bonjour michel_m,
La procédure avec la recopie incrémentée ne semble pas moins rapide
Sub Macro2()
Dim Derlig As Long
Dim Start As Single
Application.ScreenUpdating = False
Start = Timer
Derlig = Range("B" & Rows.Count).End(xlUp).Row
Range("C2").FormulaR1C1 = "=IF(RC[-1]>0,RC[-1]-R1C2,"""")"
Range("C2").AutoFill Destination:=Range("C2:C" & Derlig), Type:=xlFillDefault
Range("C2:C" & Derlig) = Range("C2:C" & Derlig).Value
Application.ScreenUpdating = True
MsgBox "colonne C calculée en " & Timer - Start & " secondes."
End Sub
A+
Bonjour,
Tout à fait d'accord dans ce cas mais si i on écrit une formule pourquoi utiliser VBA ?
A propos et pour notre ami Chnoir qui débute en VBA -bienvenue à bord du Titanic- une petite démo de comparaison de rapidité sur ce thème que j'avais fait il y a bien longtemps...
https://www.cjoint.com/?3AglIs7Do9V
Tout à fait d'accord dans ce cas mais si i on écrit une formule pourquoi utiliser VBA ?
A propos et pour notre ami Chnoir qui débute en VBA -bienvenue à bord du Titanic- une petite démo de comparaison de rapidité sur ce thème que j'avais fait il y a bien longtemps...
https://www.cjoint.com/?3AglIs7Do9V
Bonjour à tous,
Je débute en VBA
En politesse aussi, débute par là, c'est plus rapidement maitrisé...
eric
Je débute en VBA
En politesse aussi, débute par là, c'est plus rapidement maitrisé...
eric
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci, cela marche mais l'écriture commence en colonne c3
En fait j'ai encore essayé quelque chose mais sa bloque, vous pouvez peux être m'aider
Sub TempReel1()
Dim compteur As Long
'boucle
For compteur = 1 To 65536
Cells(compteur, 3).Select
ActiveCell.Value = ActiveCell.Offset(0, -1) - Cells(1, 2)
If ActiveCell.Offset(0 - 1) <> "" Then Exit For ' sa bloque ici
Next compteur
End Sub
Merci
En fait j'ai encore essayé quelque chose mais sa bloque, vous pouvez peux être m'aider
Sub TempReel1()
Dim compteur As Long
'boucle
For compteur = 1 To 65536
Cells(compteur, 3).Select
ActiveCell.Value = ActiveCell.Offset(0, -1) - Cells(1, 2)
If ActiveCell.Offset(0 - 1) <> "" Then Exit For ' sa bloque ici
Next compteur
End Sub
Merci