1ere, 2nde... cellunes non vide
Résolu
sanchis81
Messages postés
138
Statut
Membre
-
sanchis81 Messages postés 138 Statut Membre -
sanchis81 Messages postés 138 Statut Membre -
Bonjour à tous,
j'ai un tableau Excel sous la forme suivante:
A B C D E
1
2 8
3
4 7
5
6 1
J'aimerais venir coller dans la case E1 la valeur de la 1ère cellule non vide de la colonne B
E2 la valeur de la 2nde cellule non vide de la colonne B
E3 la valeur de la 3ème cellule non vide de la colonne B
Le résultat serait:
E
1 8
2 7
3 1
Merci d'avance pour votre aide!
Sanchis
j'ai un tableau Excel sous la forme suivante:
A B C D E
1
2 8
3
4 7
5
6 1
J'aimerais venir coller dans la case E1 la valeur de la 1ère cellule non vide de la colonne B
E2 la valeur de la 2nde cellule non vide de la colonne B
E3 la valeur de la 3ème cellule non vide de la colonne B
Le résultat serait:
E
1 8
2 7
3 1
Merci d'avance pour votre aide!
Sanchis
Configuration: Windows XP Internet Explorer 6.0
6 réponses
-
salut Sanchis
y'avait bin longtemps...
Const dep As Byte = 2 'ligne de départ minimum Sub colB_nonvide() derlig = Range("B65536").End(3).Row nbre = Application.CountA(Range(Cells(dep, 2), Cells(derlig, 2))) Application.ScreenUpdating = False Range(Cells(dep, 5), Cells(derlig, 5)).ClearContents lig = dep For cptr = 0 To nbre - 1 lig = Columns(2).Find("*", Cells(lig, 2)).Row Cells(dep + cptr, 5) = Cells(lig, 2) Next End Sub
edit 11:23h tu dis si tu veux absolument commencer ligne 1 -
Merci Michel! c'est exactement ce que j'attendais!
bonne journée -
Salut Sanchis
y'avait bin longtemps...
Const dep As Byte = 2 'ligne de départ minimum
Sub colB_nonvide()
derlig = Range("B65536").End(3).Row
nbre = Application.CountA(Range(Cells(dep, 2), Cells(derlig, 2)))
Application.ScreenUpdating = False
Range(Cells(dep, 5), Cells(derlig, 5)).ClearContents
lig = dep
For cptr = 0 To nbre - 1
lig = Columns(2).Find("*", Cells(lig, 2)).Row
Cells(dep + cptr, 5) = Cells(lig, 2)
Next
End Sub
Bonjour Michel,
suite à ton dernier message, j'ai mis en place ta macro dans mon outil.
Mon tableau fait environ 3000 lignes. Chaque cellule contient une formule. Selon les cas, soit le résultat de cette formule est "" ou un nombre.
Le problème est que la macro analyse l'ensemble des cellules puisque ces cellules contiennent des formules. Et c'est très très long.
A l'inverse, si je supprime l'ensemble des formules sauf celles où il y a un résultat, la macro est très rapide. Le problème est que je ne peux pas me permettre de les supprimer....
Aurais tu une solution pour rendre cette macro plus rapide?
Merci d'avance michel. -
Salut Sanchis
y'avait bin longtemps...
Const dep As Byte = 2 'ligne de départ minimum
Sub colB_nonvide()
derlig = Range("B65536").End(3).Row
nbre = Application.CountA(Range(Cells(dep, 2), Cells(derlig, 2)))
Application.ScreenUpdating = False
Range(Cells(dep, 5), Cells(derlig, 5)).ClearContents
lig = dep
For cptr = 0 To nbre - 1
lig = Columns(2).Find("*", Cells(lig, 2)).Row
Cells(dep + cptr, 5) = Cells(lig, 2)
Next
End Sub
Bonjour Michel,
suite à ton dernier message, j'ai mis en place ta macro dans mon outil.
Mon tableau fait environ 3000 lignes. Chaque cellule contient une formule. Selon les cas, soit le résultat de cette formule est "" ou un nombre.
Le problème est que la macro analyse l'ensemble des cellules puisque ces cellules contiennent des formules. Et c'est très très long.
A l'inverse, si je supprime l'ensemble des formules sauf celles où il y a un résultat, la macro est très rapide. Le problème est que je ne peux pas me permettre de les supprimer....
Aurais tu une solution pour rendre cette macro plus rapide?
Merci d'avance michel. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
re,
il autait été utile que tu précises les conditions et le nombre de lignes au départ... essaies de t'en souvenir pour ta prochaine demande
la macro modifiée en fonction. compte tenu du nombre de lignes, utilisation d'un tableau de variables pour aller + vite
Const dep As Byte = 2 'ligne de départ minimum Sub colB_nonvide() Dim tablo Dim derlig As Integer, nbre As Integer, cptr As Integer, lig As Integer derlig = Range("B65536").End(xlUp).Row nbre = Application.CountA(Range(Cells(dep, 2), Cells(derlig, 2))) - _ Application.CountIf(Range(Cells(dep, 2), Cells(derlig, 2)), "") Application.ScreenUpdating = False Range(Cells(dep, 5), Cells(derlig, 5)).ClearContents ReDim tablo(nbre - 1) lig = dep - 1 For cptr = 0 To nbre - 1 lig = Columns(2).Find("*", Cells(lig, 2), xlValues).Row tablo(cptr) = Cells(lig, 2) Next Range("E2").Resize(UBound(tablo), 1) = Application.Transpose(tablo) -
Merci Michel. Désolé pour les détails, je le saurai pour la prochaine fois...