VBA explication du code

A

ArnO

Guest
Bonjour à tous,


Je voudrais avoir un peu d'aide sur du code :


Sub DernièreCellule()
'
' DernièreCellule Macro
' Macro enregistrée le 26/11/2001 par Mickey
'

ActiveCell.Select 'Selectionne la cellule active
Do While ActiveCell <> "" 'Fais jusqu'à ce ke la cell active soit différent de 0
ActiveCell.Offset(20, 0).Range("A1").Select '?????
Loop ' boucle

Do While ActiveCell = "" 'Fais jusqu'à ce ke la cell active = 0
ActiveCell.Offset(-1, 0).Range("A1").Select
Loop 'boucle

End Sub

Merci de votre aide

ArnO
 
T

Talere

Guest
Je ne sais pas ce que tu as l'intention de faire ... d'après ce que je comprend, t'essais d'avoir la dernière cellule vide de ta colonne et la première partie de ton code permet d'aller plus vite (saut de 20 au lieu de 1).

Saches que pour cette opération, tu peux tout aussi bien faire double-clic sur le bord bas de ta cellule active.

Si cette dernière solution ne te conviens pas et si c'est une question de rapidité, tu peux toujours utiliser la fonction screenupdating à faux au debut ( à remettre à vrai à la fin ) qui empêche l'actualisation des données. De même, tu n'es pas obligé de selectionner chaque cellule.

Sub DernièreCellule()
Application.screenupdating=false
i=1
Do While ActiveCell.Offset(i, 0) <> ""
i=i+1
Loop ' boucle
ActiveCell.Offset(i-1, 0).select
Application.screenupdating=true
End Sub
 
M

Michel_M

Guest
Salut Arno,

Pas facile à répondre ta question de cours...



Do While ActiveCell <> "" 'Fais jusqu'à ce ke la cell active soit différent de 0

1/c'est l'inverse: fais tant que ( et non jusqu'à) activecell est différent de ""

2/ "" est du texte qui veut dire: texte vide
0 est un nombre (0, c'est pas rien! comme dir Raymond Devos)

ActiveCell.Offset(20, 0).Range("A1").Select

offset est un décalage de 20 lignes et 0 colonne et range "A1" est la cellule en haut et à gauche: on pourrait se passer de ce range(A1)...

Mais cette macro est très mauvaise (exemple de ce qu'il ne faut pas faire et que j'ai très souvent fait) car très lente.

Déjà comme l'a écrit Talere, la ligne suivante:

Application.screenupdating=false

fige le défilement de l'écran ==> gain de temps

Ensuite, utiliser une boucle avec "select" à chaque coup ralentit considérablement ta macro. Pour cela, je te suggère d'aller faire un tour sur le site Laurent Longre (www.longre.free.fr ou lien dans le bas de ce forum du coté du nom du Webmestre David)

tu pourrais arriver à ceci (ou mieux):

dim lig, col as long

Application.screenupdating=false

lig=activecell.row
col= activecell.column

while cells(lig,col)<>""
lig=lig+20
wend

cells(lig,col).select


Bon courage
Michel (c'est l'heure de retourner at home)
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
2
Affichages
366
Réponses
25
Affichages
957
Réponses
2
Affichages
587

Statistiques des forums

Discussions
313 137
Messages
2 095 626
Membres
106 307
dernier inscrit
LETIFI