OVH Cloud OVH Cloud

remplissage automatique des cellules avec la valeur du dessus

17 réponses
Avatar
sharmi
Bonjour
Je voudrais automatiser à l'aide d'une macro le remplissage des cellules vide avec le contenu de la cellule juste au-dessus
ex : liste sur une seule colonn
A
vide ==> à remplacer par A
vide ==> ide
CE
vide==> à remplacer par CE

Merci de votre aid
sharm

7 réponses

1 2
Avatar
Denis Michon
Un spécial AV,

(Ne pas tenir compte du message précédent), légers correctifs

les 2 mêmes procédures mais avec une sortie appropriée de la procédure !!

'--------------------------
Sub Remplir3()

Dim Rg As Range, R As Range, C As Long

With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A6555"). _
End(xlUp).Row).SpecialCells(xlCellTypeConstants)
C = .Range("A65536").End(xlUp).Row
End With

For Each are In Rg.Areas
If are.Row = C Then
Set Rg = Nothing: Set R = Nothing
Exit Sub
End If
Set R = are(are.Rows.Count)
With R.Resize(R.End(xlDown).Row - R(1).Row)
.FillDown
End With
Next
End Sub
'--------------------------
Sub Remplir4()

Dim R As Range, C As Long, A As Long

With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A6555"). _
End(xlUp).Row).SpecialCells(xlCellTypeConstants)
C = .Range("A65536").End(xlUp).Row
End With

For Each are In Rg.Areas
If are.Row = C Then
Set R = Nothing
Exit Sub
End If
Set R = are(are.Rows.Count)
A = R.End(xlDown).Row - R.Row
R.Resize(A).FillDown
Next

End Sub
'--------------------------


Salutations!




"AV" a écrit dans le message de news:%
Ceci étant dit, tes propos et ceux de ce message sortent du cadre de la
problématique posée par Shami


C'était quoi la question ? ;-)
C'était juste pour faire un petit tour dans la propriété Areas et une histoire
d'optimisation de code...

AV

Avatar
garnote
"Denis Michon" a écrit dans le message de news:
9SJwb.65398$
Un spécial AV,

(Ne pas tenir compte du message précédent), légers correctifs

les 2 mêmes procédures mais avec une sortie appropriée de la procédure !!

'--------------------------
Sub Remplir3()

Dim Rg As Range, R As Range, C As Long

With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A6555"). _
End(xlUp).Row).SpecialCells(xlCellTypeConstants)
C = .Range("A65536").End(xlUp).Row
End With

For Each are In Rg.Areas
If are.Row = C Then
Set Rg = Nothing: Set R = Nothing
Exit Sub
End If
Set R = are(are.Rows.Count)
With R.Resize(R.End(xlDown).Row - R(1).Row)
.FillDown
End With
Next
End Sub
'--------------------------
Sub Remplir4()

Dim R As Range, C As Long, A As Long

With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A6555"). _
End(xlUp).Row).SpecialCells(xlCellTypeConstants)
C = .Range("A65536").End(xlUp).Row
End With

For Each are In Rg.Areas
If are.Row = C Then
Set R = Nothing
Exit Sub
End If
Set R = are(are.Rows.Count)
A = R.End(xlDown).Row - R.Row
R.Resize(A).FillDown
Next

End Sub
'--------------------------


Salutations!




"AV" a écrit dans le message de
news:%

Ceci étant dit, tes propos et ceux de ce message sortent du cadre de la
problématique posée par Shami


C'était quoi la question ? ;-)
C'était juste pour faire un petit tour dans la propriété Areas et une
histoire

d'optimisation de code...

AV






Avatar
garnote
Je prends une petite pause pour aller enseigner
et j'étudierai tes savantes macros haute vitesse si
mes élèves m'en laissent le temps en cette laborieuse
fin de session !

;-)

Serge

"Denis Michon" a écrit dans le message de news:
9SJwb.65398$
Un spécial AV,

(Ne pas tenir compte du message précédent), légers correctifs

les 2 mêmes procédures mais avec une sortie appropriée de la procédure !!

'--------------------------
Sub Remplir3()

Dim Rg As Range, R As Range, C As Long

With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A6555"). _
End(xlUp).Row).SpecialCells(xlCellTypeConstants)
C = .Range("A65536").End(xlUp).Row
End With

For Each are In Rg.Areas
If are.Row = C Then
Set Rg = Nothing: Set R = Nothing
Exit Sub
End If
Set R = are(are.Rows.Count)
With R.Resize(R.End(xlDown).Row - R(1).Row)
.FillDown
End With
Next
End Sub
'--------------------------
Sub Remplir4()

Dim R As Range, C As Long, A As Long

With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A6555"). _
End(xlUp).Row).SpecialCells(xlCellTypeConstants)
C = .Range("A65536").End(xlUp).Row
End With

For Each are In Rg.Areas
If are.Row = C Then
Set R = Nothing
Exit Sub
End If
Set R = are(are.Rows.Count)
A = R.End(xlDown).Row - R.Row
R.Resize(A).FillDown
Next

End Sub
'--------------------------


Salutations!




"AV" a écrit dans le message de
news:%

Ceci étant dit, tes propos et ceux de ce message sortent du cadre de la
problématique posée par Shami


C'était quoi la question ? ;-)
C'était juste pour faire un petit tour dans la propriété Areas et une
histoire

d'optimisation de code...

AV






Avatar
Denis Michon
Bonjour AV,

Si tu veux tester, utilise les procédures du message en dessous (vers le bas de l'écran) de ton message... la dernière
version !


Salutations!


"AV" a écrit dans le message de news:
Pour savoir si je te décerne un satisfecit, je testerais ça ultérieurement sur
grandes plages
A l'intuition, me semble que le Resize devrait ralentir mais c'est juste au
feeling !

AV
Avatar
Clément Marcotte
Ceci étant dit, tes propos et ceux de ce message sortent du cadre de
la problématique posée

par Shami. puisque ce dernier


M"est avis que c'est cette dernière, mais je divague peut-être.

Avatar
Clément Marcotte
mes élèves m'en laissent le temps en cette laborieuse
fin de session !


T'as juste à leur promettre 70 % à tous, non ? ;-)

Avatar
AV
Pour les rares que ça peut interresser ;-)
Résultats des tests :

Principes :
- Valeurs en A1:A20000
- Remplissage cellules : 2 pleines - 2 vides - 2 pleines - 2 vides.....etc

En haut du module :
Private Declare Function GetTickCount Lib "kernel32" () As Long

laSubDeMachin()
Application.ScreenUpdating = False
XX = GetTickCount()
'le code
MsgBox GetTickCount() - XX
End Sub

Temps moyens en millisecondes après plusieurs tests
XL2000 - AMD 1,2Ghtz (pas super rapide...)

- Macro Denis 4 ---> 11000
- Macro Denis 3 ---> 10500
- Macro Garnote ---> 5500
- Macro AV ---> 4000

Va savoir si on peut pas mieux faire....?
AV
1 2