Je débute en VBA
Résolu/Fermé
chnoir1
Messages postés
16
Date d'inscription
dimanche 5 janvier 2014
Statut
Membre
Dernière intervention
21 février 2015
-
5 janv. 2014 à 23:16
chnoir1 Messages postés 16 Date d'inscription dimanche 5 janvier 2014 Statut Membre Dernière intervention 21 février 2015 - 6 janv. 2014 à 21:46
chnoir1 Messages postés 16 Date d'inscription dimanche 5 janvier 2014 Statut Membre Dernière intervention 21 février 2015 - 6 janv. 2014 à 21:46
A voir également:
- Je débute en VBA
- Erreur 1004 vba ✓ - Forum VB / VBA
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba dernière colonne non vide ✓ - Forum VB / VBA
- Récupérer valeur cellule vba ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
6 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 6/01/2014 à 07:18
Modifié par michel_m le 6/01/2014 à 07:18
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
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
6 janv. 2014 à 09:10
6 janv. 2014 à 09:10
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+
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
6 janv. 2014 à 11:35
6 janv. 2014 à 11:35
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
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 216
6 janv. 2014 à 11:40
6 janv. 2014 à 11:40
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
6 janv. 2014 à 11:42
6 janv. 2014 à 11:42
Bonjour Eriic
Tiens, c'est vrai, je n'avais pas fait attention; merci d'avoir réagi
Tiens, c'est vrai, je n'avais pas fait attention; merci d'avoir réagi
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
chnoir1
Messages postés
16
Date d'inscription
dimanche 5 janvier 2014
Statut
Membre
Dernière intervention
21 février 2015
6 janv. 2014 à 19:34
6 janv. 2014 à 19:34
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
chnoir1
Messages postés
16
Date d'inscription
dimanche 5 janvier 2014
Statut
Membre
Dernière intervention
21 février 2015
6 janv. 2014 à 21:46
6 janv. 2014 à 21:46
Merci a tous, solution OK
Bonne soirée.
Christian
Bonne soirée.
Christian