Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sup ligne si non num.

11 réponses
Avatar
Manu
Bonjour,

Pourriez vous m'aider car j'ai 2 soucis différents,

Mon 1er est que je souhaiterais suprimer toute les lignes vides si de C5 à
C500 la cellule n'est pas numérique.

Mon 2nd est que si dans une plage de A5 à A300 il y a des celulles vides, je
souhaiterais qu'elles se remplissent du meme contenu que la cellule du
dessus.

Merci

Manu

10 réponses

1 2
Avatar
FxM
Bonjour manu,

Rien de tel qu'un peu de lecture de forum et d'analyse de texte aurait
(me semble-t-il) évité de poser ces questions, non ???

Question 1 :
Mon 1er est que je souhaiterais suprimer toute les lignes vides si de C5
à C500 la cellule n'est pas numérique.

Réponse 1 :
La première chose est que C5 à C500 soient numériques ou pas, si une
valeur est présente dans la cellule, la ligne n'est pas vide ...
Laissons la condition de coté jusqu'à clarification de ta part.

Pour ce qui concerne la suppression, "delete" = effacer, détruire et on
parle de ligne entière donc "entirerow".
Il y a deux fils en cours qui comprennent l'expression .EntireRow.Delete

Un code parmi tant d'autres :
Sub test()
lx = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("A1:Z1").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub


Question 2 :
Mon 2nd est que si dans une plage de A5 à A300 il y a des cellules
vides, je souhaiterais qu'elles se remplissent du même contenu que la
cellule du dessus.

Réponse 2 :
Avec ce que l'on vient de faire au dessus, il est probable qu'il n'y a
plus grand chose de vide (enfin, j'espère ...).

Même principe de lecture du forum et de recherche sur des vides "blank"

De AV le 22/08 (ce n'est pas si loin) :
Sélection préalable puis :
Sub Complète_Lignes2()
Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
[Selection].Value = [Selection].Value
End Sub
... où l'on remplace aisément "Selection" par Range("A2:A300").
Mais que mettre si A1 est vide ?


Voilà, voilà !

@+
FxM





Bonjour,

Pourriez vous m'aider car j'ai 2 soucis différents,

Mon 1er est que je souhaiterais suprimer toute les lignes vides si de C5 à
C500 la cellule n'est pas numérique.

Mon 2nd est que si dans une plage de A5 à A300 il y a des celulles vides, je
souhaiterais qu'elles se remplissent du meme contenu que la cellule du
dessus.

Merci

Manu




Avatar
Manu
Merci et tu as raison pour la lecture des ficelles, mais le soucis est que
je suis quasi nul en VBA et j'ai meme du mal à faire des modifs pour mon
probleme avec les elements présents.
Alors voici ou j'en suis :

Pour mon soucis 1 ca fonctionne bien avec cela :
Sub test()
lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("c5:c300").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub
mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes mais qu'en
revanche si il voit qu'entre C5 et C500 il y a des cellules qui comportent
du texte alors qu'il supprime également les lignes. En fait je souhaite
conserver uniquement les lignes qui dans cette plage comporte une valeur
numérique

pour le soucis 2, ca fonctionne aussi avec cela :
Sub Complète_Lignes2()
Range("A5:A300").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
Range("A5:A300").Value = Range("A5:A300").Value
End Sub
mais je ne souhaite pas qu'il s'occupe des 4 premieres lignes (et pour etre
plus precis, la plage en A5 possedera toujours quelque chose et la fin de la
plage aussi, que ce soit en A140 ou A250...) par conséquent, je souaiterais
qu'il mette le chiffre du dessus de A5 jusqu'à la derniere cellule rempli de
la col A.

En esperant avoir été plus clair.
Merci

Manu

"FxM" a écrit dans le message de news:

Bonjour manu,

Rien de tel qu'un peu de lecture de forum et d'analyse de texte aurait (me
semble-t-il) évité de poser ces questions, non ???

Question 1 :
Mon 1er est que je souhaiterais suprimer toute les lignes vides si de C5 à
C500 la cellule n'est pas numérique.

Réponse 1 :
La première chose est que C5 à C500 soient numériques ou pas, si une
valeur est présente dans la cellule, la ligne n'est pas vide ...
Laissons la condition de coté jusqu'à clarification de ta part.

Pour ce qui concerne la suppression, "delete" = effacer, détruire et on
parle de ligne entière donc "entirerow".
Il y a deux fils en cours qui comprennent l'expression .EntireRow.Delete

Un code parmi tant d'autres :
Sub test()
lx = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("A1:Z1").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub


Question 2 :
Mon 2nd est que si dans une plage de A5 à A300 il y a des cellules vides,
je souhaiterais qu'elles se remplissent du même contenu que la cellule du
dessus.

Réponse 2 :
Avec ce que l'on vient de faire au dessus, il est probable qu'il n'y a
plus grand chose de vide (enfin, j'espère ...).

Même principe de lecture du forum et de recherche sur des vides "blank"

De AV le 22/08 (ce n'est pas si loin) :
Sélection préalable puis :
Sub Complète_Lignes2()
Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
[Selection].Value = [Selection].Value
End Sub
... où l'on remplace aisément "Selection" par Range("A2:A300").
Mais que mettre si A1 est vide ?


Voilà, voilà !

@+
FxM





Bonjour,

Pourriez vous m'aider car j'ai 2 soucis différents,

Mon 1er est que je souhaiterais suprimer toute les lignes vides si de C5
à C500 la cellule n'est pas numérique.

Mon 2nd est que si dans une plage de A5 à A300 il y a des celulles vides,
je souhaiterais qu'elles se remplissent du meme contenu que la cellule du
dessus.

Merci

Manu




Avatar
FxM
Je te rassure : on a tous démarré un jour ;o)
Alors, un ch'ti coup de pouce ...

-----
Q1 : mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes
mais qu'en revanche si il voit qu'entre C5 et C500 il y a des cellules
qui comportent du texte alors qu'il supprime également les lignes. En
fait je souhaite conserver uniquement les lignes qui dans cette plage
comporte une valeur numérique

Voici ce que fait la macro suivante (attention, je ne dis pas qu'elle
fait ce que tu veux !)

sub test()
'parcourir les lignes de 500 jusqu'à 5 en remontant
for ligne = 500 to 5 step -1

'cells(ligne, "C") est la cellule "Cligne"
'isnumeric(...) retourne vrai si (...) est numérique
'not inverse ce qui suit
'donc si la cellule "Cligne" n'est *pas* numérique alors ...
if not isnumeric(cells(ligne, "C")) then

'alors ... détruire la ligne complète et remonter les autres infos
cells(ligne, "C").entirerow.delete shift:=xlup

'fin de condition
end if

'passer à la ligne suivante (juste au-dessus)
next ligne

end sub


-----
Ma première propo constituait un code parmi d'autres. Voici l'usage des
lignes différentes de ce qui précède :

lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
indique le n° de la ligne comprenant l'élément le plus bas dans les

colonnes C à IV. Retourne une erreur si les colonnes concernées sont
entièrement vides.

With Intersect(Range("c5").EntireColumn, Range("A" & r).EntireRow)
D'une part, Range("c5:c300").EntireColumn est la colonne entière de

C5:C300 en l'occurence la colonne 'C'. De l'autre, Range("A" &
r).EntireRow est la ligne n° r entière. Intersect est l'intersection de
ces zones et donc la cellule 'Cr' que l'on peut simplifier dans ce cas
par range("C" & r)

If .Cells.Count = Application.CountBlank(.Cells) Then
.cells.count est le nombre total de cellules sur une zone donnée

Application.CountBlank(.Cells) est le nombre de cellules vides sur la
même zone. Si ces deux nombres sont égaux, toutes les cellules sont
vides (attention, les commentaires sont ignorés)




-----
Pour ta question 2, il te faut chercher la dernière ligne puisque tu ne
sais pas d'avance où elle se trouve. Par contre, tu indiques que cette
dernière ligne contient quelque chose. Dans ce cas, tu peux utiliser :
derlig = range("A65536").end(xlup).row En gros :
range("A65536") Excel va à la cellule A65536
.end(xlup) puis va à la fin (vers le haut)
.row pour savoir le numéro de la ligne concernée

Ensuite, tu définis la zone sur laquelle agir :
set zone = range("A5:A" & derlig)

... avant d'appliquer une formule .FormulaR1C1 = "=R[-1]C"
uniquement sur les cellules vides .SpecialCells(xlCellTypeBlanks)
de la zone, soit :
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"

tu t'intéresse aux valeurs et pas aux formules :
zone.value = zone.value

Ce qui donne :
sub test2()
derlig = range("A65536").end(xlup).row
set zone = range("A5:A" & derlig)
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
zone.value = zone.value
end sub


Je te laisse jouer :o)

@+
FxM



Merci et tu as raison pour la lecture des ficelles, mais le soucis est que
je suis quasi nul en VBA et j'ai meme du mal à faire des modifs pour mon
probleme avec les elements présents.
Alors voici ou j'en suis :

Pour mon soucis 1 ca fonctionne bien avec cela :
Sub test()
lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("c5:c300").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub
mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes mais qu'en
revanche si il voit qu'entre C5 et C500 il y a des cellules qui comportent
du texte alors qu'il supprime également les lignes. En fait je souhaite
conserver uniquement les lignes qui dans cette plage comporte une valeur
numérique

pour le soucis 2, ca fonctionne aussi avec cela :
Sub Complète_Lignes2()
Range("A5:A300").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
Range("A5:A300").Value = Range("A5:A300").Value
End Sub
mais je ne souhaite pas qu'il s'occupe des 4 premieres lignes (et pour etre
plus precis, la plage en A5 possedera toujours quelque chose et la fin de la
plage aussi, que ce soit en A140 ou A250...) par conséquent, je souaiterais
qu'il mette le chiffre du dessus de A5 jusqu'à la derniere cellule rempli de
la col A.

En esperant avoir été plus clair.
Merci

Manu

"FxM" a écrit dans le message de news:

Bonjour manu,

Rien de tel qu'un peu de lecture de forum et d'analyse de texte aurait (me
semble-t-il) évité de poser ces questions, non ???

Question 1 :
Mon 1er est que je souhaiterais suprimer toute les lignes vides si de C5 à
C500 la cellule n'est pas numérique.

Réponse 1 :
La première chose est que C5 à C500 soient numériques ou pas, si une
valeur est présente dans la cellule, la ligne n'est pas vide ...
Laissons la condition de coté jusqu'à clarification de ta part.

Pour ce qui concerne la suppression, "delete" = effacer, détruire et on
parle de ligne entière donc "entirerow".
Il y a deux fils en cours qui comprennent l'expression .EntireRow.Delete

Un code parmi tant d'autres :
Sub test()
lx = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("A1:Z1").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub


Question 2 :
Mon 2nd est que si dans une plage de A5 à A300 il y a des cellules vides,
je souhaiterais qu'elles se remplissent du même contenu que la cellule du
dessus.

Réponse 2 :
Avec ce que l'on vient de faire au dessus, il est probable qu'il n'y a
plus grand chose de vide (enfin, j'espère ...).

Même principe de lecture du forum et de recherche sur des vides "blank"

De AV le 22/08 (ce n'est pas si loin) :
Sélection préalable puis :
Sub Complète_Lignes2()
Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
[Selection].Value = [Selection].Value
End Sub
... où l'on remplace aisément "Selection" par Range("A2:A300").
Mais que mettre si A1 est vide ?


Voilà, voilà !

@+
FxM





Bonjour,

Pourriez vous m'aider car j'ai 2 soucis différents,

Mon 1er est que je souhaiterais suprimer toute les lignes vides si de C5
à C500 la cellule n'est pas numérique.

Mon 2nd est que si dans une plage de A5 à A300 il y a des celulles vides,
je souhaiterais qu'elles se remplissent du meme contenu que la cellule du
dessus.

Merci

Manu








Avatar
Manu
Super, merci je vais travailler avec ceci aujourd'hui et te tiens au
courant.

"FxM" a écrit dans le message de news:

Je te rassure : on a tous démarré un jour ;o)
Alors, un ch'ti coup de pouce ...

-----
Q1 : mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes mais
qu'en revanche si il voit qu'entre C5 et C500 il y a des cellules qui
comportent du texte alors qu'il supprime également les lignes. En fait je
souhaite conserver uniquement les lignes qui dans cette plage comporte une
valeur numérique

Voici ce que fait la macro suivante (attention, je ne dis pas qu'elle fait
ce que tu veux !)

sub test()
'parcourir les lignes de 500 jusqu'à 5 en remontant
for ligne = 500 to 5 step -1

'cells(ligne, "C") est la cellule "Cligne"
'isnumeric(...) retourne vrai si (...) est numérique
'not inverse ce qui suit
'donc si la cellule "Cligne" n'est *pas* numérique alors ...
if not isnumeric(cells(ligne, "C")) then

'alors ... détruire la ligne complète et remonter les autres infos
cells(ligne, "C").entirerow.delete shift:=xlup

'fin de condition
end if

'passer à la ligne suivante (juste au-dessus)
next ligne

end sub


-----
Ma première propo constituait un code parmi d'autres. Voici l'usage des
lignes différentes de ce qui précède :

lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
indique le n° de la ligne comprenant l'élément le plus bas dans les

colonnes C à IV. Retourne une erreur si les colonnes concernées sont
entièrement vides.

With Intersect(Range("c5").EntireColumn, Range("A" & r).EntireRow)
D'une part, Range("c5:c300").EntireColumn est la colonne entière de

C5:C300 en l'occurence la colonne 'C'. De l'autre, Range("A" &
r).EntireRow est la ligne n° r entière. Intersect est l'intersection de
ces zones et donc la cellule 'Cr' que l'on peut simplifier dans ce cas par
range("C" & r)

If .Cells.Count = Application.CountBlank(.Cells) Then
.cells.count est le nombre total de cellules sur une zone donnée

Application.CountBlank(.Cells) est le nombre de cellules vides sur la même
zone. Si ces deux nombres sont égaux, toutes les cellules sont vides
(attention, les commentaires sont ignorés)




-----
Pour ta question 2, il te faut chercher la dernière ligne puisque tu ne
sais pas d'avance où elle se trouve. Par contre, tu indiques que cette
dernière ligne contient quelque chose. Dans ce cas, tu peux utiliser :
derlig = range("A65536").end(xlup).row En gros :
range("A65536") Excel va à la cellule A65536
.end(xlup) puis va à la fin (vers le haut)
.row pour savoir le numéro de la ligne concernée

Ensuite, tu définis la zone sur laquelle agir :
set zone = range("A5:A" & derlig)

... avant d'appliquer une formule .FormulaR1C1 = "=R[-1]C"
uniquement sur les cellules vides .SpecialCells(xlCellTypeBlanks)
de la zone, soit :
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"

tu t'intéresse aux valeurs et pas aux formules :
zone.value = zone.value

Ce qui donne :
sub test2()
derlig = range("A65536").end(xlup).row
set zone = range("A5:A" & derlig)
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
zone.value = zone.value
end sub


Je te laisse jouer :o)

@+
FxM



Merci et tu as raison pour la lecture des ficelles, mais le soucis est
que je suis quasi nul en VBA et j'ai meme du mal à faire des modifs pour
mon probleme avec les elements présents.
Alors voici ou j'en suis :

Pour mon soucis 1 ca fonctionne bien avec cela :
Sub test()
lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("c5:c300").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub
mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes mais
qu'en revanche si il voit qu'entre C5 et C500 il y a des cellules qui
comportent du texte alors qu'il supprime également les lignes. En fait je
souhaite conserver uniquement les lignes qui dans cette plage comporte
une valeur numérique

pour le soucis 2, ca fonctionne aussi avec cela :
Sub Complète_Lignes2()
Range("A5:A300").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
Range("A5:A300").Value = Range("A5:A300").Value
End Sub
mais je ne souhaite pas qu'il s'occupe des 4 premieres lignes (et pour
etre plus precis, la plage en A5 possedera toujours quelque chose et la
fin de la plage aussi, que ce soit en A140 ou A250...) par conséquent, je
souaiterais qu'il mette le chiffre du dessus de A5 jusqu'à la derniere
cellule rempli de la col A.

En esperant avoir été plus clair.
Merci

Manu

"FxM" a écrit dans le message de news:

Bonjour manu,

Rien de tel qu'un peu de lecture de forum et d'analyse de texte aurait
(me semble-t-il) évité de poser ces questions, non ???

Question 1 :
Mon 1er est que je souhaiterais suprimer toute les lignes vides si de C5
à C500 la cellule n'est pas numérique.

Réponse 1 :
La première chose est que C5 à C500 soient numériques ou pas, si une
valeur est présente dans la cellule, la ligne n'est pas vide ...
Laissons la condition de coté jusqu'à clarification de ta part.

Pour ce qui concerne la suppression, "delete" = effacer, détruire et on
parle de ligne entière donc "entirerow".
Il y a deux fils en cours qui comprennent l'expression .EntireRow.Delete

Un code parmi tant d'autres :
Sub test()
lx = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("A1:Z1").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub


Question 2 :
Mon 2nd est que si dans une plage de A5 à A300 il y a des cellules
vides, je souhaiterais qu'elles se remplissent du même contenu que la
cellule du dessus.

Réponse 2 :
Avec ce que l'on vient de faire au dessus, il est probable qu'il n'y a
plus grand chose de vide (enfin, j'espère ...).

Même principe de lecture du forum et de recherche sur des vides "blank"

De AV le 22/08 (ce n'est pas si loin) :
Sélection préalable puis :
Sub Complète_Lignes2()
Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
[Selection].Value = [Selection].Value
End Sub
... où l'on remplace aisément "Selection" par Range("A2:A300").
Mais que mettre si A1 est vide ?


Voilà, voilà !

@+
FxM





Bonjour,

Pourriez vous m'aider car j'ai 2 soucis différents,

Mon 1er est que je souhaiterais suprimer toute les lignes vides si de
C5 à C500 la cellule n'est pas numérique.

Mon 2nd est que si dans une plage de A5 à A300 il y a des celulles
vides, je souhaiterais qu'elles se remplissent du meme contenu que la
cellule du dessus.

Merci

Manu









Avatar
Manu
C'est super car j'ai les explications en meme temps, ca permet de mieux
rentrer dedans. j'ai toutefois enrore 2 ennuis :

Q1
Il supprime bien les lignes dont une des cellules de la col C comporte du
texte, mais ne supprime plus les lignes dont les cellules de la col C sont
vide. Je veux garder uniquement les numériques. alors j'ai fait des tests en
ajoutant cela, If .Cells.Count = Application.CountBlank(.Cells) Then, mais
je n'y arrive pas.

Q2
ca fonctionne tres bien sauf qu'il me met en erreur lorsqu'il n'a pas de
cellule vide, il faudrait dans ces cas là qu'il ne fasse rien.

Merci encore et surtout pour tes explications !

Manu

"FxM" a écrit dans le message de news:

Je te rassure : on a tous démarré un jour ;o)
Alors, un ch'ti coup de pouce ...

-----
Q1 : mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes mais
qu'en revanche si il voit qu'entre C5 et C500 il y a des cellules qui
comportent du texte alors qu'il supprime également les lignes. En fait je
souhaite conserver uniquement les lignes qui dans cette plage comporte une
valeur numérique

Voici ce que fait la macro suivante (attention, je ne dis pas qu'elle fait
ce que tu veux !)

sub test()
'parcourir les lignes de 500 jusqu'à 5 en remontant
for ligne = 500 to 5 step -1

'cells(ligne, "C") est la cellule "Cligne"
'isnumeric(...) retourne vrai si (...) est numérique
'not inverse ce qui suit
'donc si la cellule "Cligne" n'est *pas* numérique alors ...
if not isnumeric(cells(ligne, "C")) then

'alors ... détruire la ligne complète et remonter les autres infos
cells(ligne, "C").entirerow.delete shift:=xlup

'fin de condition
end if

'passer à la ligne suivante (juste au-dessus)
next ligne

end sub


-----
Ma première propo constituait un code parmi d'autres. Voici l'usage des
lignes différentes de ce qui précède :

lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
indique le n° de la ligne comprenant l'élément le plus bas dans les

colonnes C à IV. Retourne une erreur si les colonnes concernées sont
entièrement vides.

With Intersect(Range("c5").EntireColumn, Range("A" & r).EntireRow)
D'une part, Range("c5:c300").EntireColumn est la colonne entière de

C5:C300 en l'occurence la colonne 'C'. De l'autre, Range("A" &
r).EntireRow est la ligne n° r entière. Intersect est l'intersection de
ces zones et donc la cellule 'Cr' que l'on peut simplifier dans ce cas par
range("C" & r)

If .Cells.Count = Application.CountBlank(.Cells) Then
.cells.count est le nombre total de cellules sur une zone donnée

Application.CountBlank(.Cells) est le nombre de cellules vides sur la même
zone. Si ces deux nombres sont égaux, toutes les cellules sont vides
(attention, les commentaires sont ignorés)




-----
Pour ta question 2, il te faut chercher la dernière ligne puisque tu ne
sais pas d'avance où elle se trouve. Par contre, tu indiques que cette
dernière ligne contient quelque chose. Dans ce cas, tu peux utiliser :
derlig = range("A65536").end(xlup).row En gros :
range("A65536") Excel va à la cellule A65536
.end(xlup) puis va à la fin (vers le haut)
.row pour savoir le numéro de la ligne concernée

Ensuite, tu définis la zone sur laquelle agir :
set zone = range("A5:A" & derlig)

... avant d'appliquer une formule .FormulaR1C1 = "=R[-1]C"
uniquement sur les cellules vides .SpecialCells(xlCellTypeBlanks)
de la zone, soit :
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"

tu t'intéresse aux valeurs et pas aux formules :
zone.value = zone.value

Ce qui donne :
sub test2()
derlig = range("A65536").end(xlup).row
set zone = range("A5:A" & derlig)
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
zone.value = zone.value
end sub


Je te laisse jouer :o)

@+
FxM



Merci et tu as raison pour la lecture des ficelles, mais le soucis est
que je suis quasi nul en VBA et j'ai meme du mal à faire des modifs pour
mon probleme avec les elements présents.
Alors voici ou j'en suis :

Pour mon soucis 1 ca fonctionne bien avec cela :
Sub test()
lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("c5:c300").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub
mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes mais
qu'en revanche si il voit qu'entre C5 et C500 il y a des cellules qui
comportent du texte alors qu'il supprime également les lignes. En fait je
souhaite conserver uniquement les lignes qui dans cette plage comporte
une valeur numérique

pour le soucis 2, ca fonctionne aussi avec cela :
Sub Complète_Lignes2()
Range("A5:A300").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
Range("A5:A300").Value = Range("A5:A300").Value
End Sub
mais je ne souhaite pas qu'il s'occupe des 4 premieres lignes (et pour
etre plus precis, la plage en A5 possedera toujours quelque chose et la
fin de la plage aussi, que ce soit en A140 ou A250...) par conséquent, je
souaiterais qu'il mette le chiffre du dessus de A5 jusqu'à la derniere
cellule rempli de la col A.

En esperant avoir été plus clair.
Merci

Manu

"FxM" a écrit dans le message de news:

Bonjour manu,

Rien de tel qu'un peu de lecture de forum et d'analyse de texte aurait
(me semble-t-il) évité de poser ces questions, non ???

Question 1 :
Mon 1er est que je souhaiterais suprimer toute les lignes vides si de C5
à C500 la cellule n'est pas numérique.

Réponse 1 :
La première chose est que C5 à C500 soient numériques ou pas, si une
valeur est présente dans la cellule, la ligne n'est pas vide ...
Laissons la condition de coté jusqu'à clarification de ta part.

Pour ce qui concerne la suppression, "delete" = effacer, détruire et on
parle de ligne entière donc "entirerow".
Il y a deux fils en cours qui comprennent l'expression .EntireRow.Delete

Un code parmi tant d'autres :
Sub test()
lx = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("A1:Z1").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub


Question 2 :
Mon 2nd est que si dans une plage de A5 à A300 il y a des cellules
vides, je souhaiterais qu'elles se remplissent du même contenu que la
cellule du dessus.

Réponse 2 :
Avec ce que l'on vient de faire au dessus, il est probable qu'il n'y a
plus grand chose de vide (enfin, j'espère ...).

Même principe de lecture du forum et de recherche sur des vides "blank"

De AV le 22/08 (ce n'est pas si loin) :
Sélection préalable puis :
Sub Complète_Lignes2()
Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
[Selection].Value = [Selection].Value
End Sub
... où l'on remplace aisément "Selection" par Range("A2:A300").
Mais que mettre si A1 est vide ?


Voilà, voilà !

@+
FxM





Bonjour,

Pourriez vous m'aider car j'ai 2 soucis différents,

Mon 1er est que je souhaiterais suprimer toute les lignes vides si de
C5 à C500 la cellule n'est pas numérique.

Mon 2nd est que si dans une plage de A5 à A300 il y a des celulles
vides, je souhaiterais qu'elles se remplissent du meme contenu que la
cellule du dessus.

Merci

Manu









Avatar
Manu
Pour la Q1 j'ai ajouter :

[c5:c500].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Et ca à l'air de fonctionner ce qui donne pour finir :

Sub test()
For ligne = 500 To 5 Step -1
[c5:c500].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
If Not IsNumeric(Cells(ligne, "C")) Then
Cells(ligne, "C").EntireRow.Delete shift:=xlUp
End If
Next ligne
End Sub

Je n'ai rien trouver en revanche pour la Q2

Manu

"Manu" a écrit dans le message de news:

C'est super car j'ai les explications en meme temps, ca permet de mieux
rentrer dedans. j'ai toutefois enrore 2 ennuis :

Q1
Il supprime bien les lignes dont une des cellules de la col C comporte du
texte, mais ne supprime plus les lignes dont les cellules de la col C sont
vide. Je veux garder uniquement les numériques. alors j'ai fait des tests
en ajoutant cela, If .Cells.Count = Application.CountBlank(.Cells) Then,
mais je n'y arrive pas.

Q2
ca fonctionne tres bien sauf qu'il me met en erreur lorsqu'il n'a pas de
cellule vide, il faudrait dans ces cas là qu'il ne fasse rien.

Merci encore et surtout pour tes explications !

Manu

"FxM" a écrit dans le message de news:

Je te rassure : on a tous démarré un jour ;o)
Alors, un ch'ti coup de pouce ...

-----
Q1 : mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes
mais qu'en revanche si il voit qu'entre C5 et C500 il y a des cellules
qui comportent du texte alors qu'il supprime également les lignes. En
fait je souhaite conserver uniquement les lignes qui dans cette plage
comporte une valeur numérique

Voici ce que fait la macro suivante (attention, je ne dis pas qu'elle
fait ce que tu veux !)

sub test()
'parcourir les lignes de 500 jusqu'à 5 en remontant
for ligne = 500 to 5 step -1

'cells(ligne, "C") est la cellule "Cligne"
'isnumeric(...) retourne vrai si (...) est numérique
'not inverse ce qui suit
'donc si la cellule "Cligne" n'est *pas* numérique alors ...
if not isnumeric(cells(ligne, "C")) then

'alors ... détruire la ligne complète et remonter les autres infos
cells(ligne, "C").entirerow.delete shift:=xlup

'fin de condition
end if

'passer à la ligne suivante (juste au-dessus)
next ligne

end sub


-----
Ma première propo constituait un code parmi d'autres. Voici l'usage des
lignes différentes de ce qui précède :

lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
indique le n° de la ligne comprenant l'élément le plus bas dans les

colonnes C à IV. Retourne une erreur si les colonnes concernées sont
entièrement vides.

With Intersect(Range("c5").EntireColumn, Range("A" & r).EntireRow)
D'une part, Range("c5:c300").EntireColumn est la colonne entière de

C5:C300 en l'occurence la colonne 'C'. De l'autre, Range("A" &
r).EntireRow est la ligne n° r entière. Intersect est l'intersection de
ces zones et donc la cellule 'Cr' que l'on peut simplifier dans ce cas
par range("C" & r)

If .Cells.Count = Application.CountBlank(.Cells) Then
.cells.count est le nombre total de cellules sur une zone donnée

Application.CountBlank(.Cells) est le nombre de cellules vides sur la
même zone. Si ces deux nombres sont égaux, toutes les cellules sont vides
(attention, les commentaires sont ignorés)




-----
Pour ta question 2, il te faut chercher la dernière ligne puisque tu ne
sais pas d'avance où elle se trouve. Par contre, tu indiques que cette
dernière ligne contient quelque chose. Dans ce cas, tu peux utiliser :
derlig = range("A65536").end(xlup).row En gros :
range("A65536") Excel va à la cellule A65536
.end(xlup) puis va à la fin (vers le haut)
.row pour savoir le numéro de la ligne concernée

Ensuite, tu définis la zone sur laquelle agir :
set zone = range("A5:A" & derlig)

... avant d'appliquer une formule .FormulaR1C1 = "=R[-1]C"
uniquement sur les cellules vides .SpecialCells(xlCellTypeBlanks)
de la zone, soit :
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"

tu t'intéresse aux valeurs et pas aux formules :
zone.value = zone.value

Ce qui donne :
sub test2()
derlig = range("A65536").end(xlup).row
set zone = range("A5:A" & derlig)
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
zone.value = zone.value
end sub


Je te laisse jouer :o)

@+
FxM



Merci et tu as raison pour la lecture des ficelles, mais le soucis est
que je suis quasi nul en VBA et j'ai meme du mal à faire des modifs pour
mon probleme avec les elements présents.
Alors voici ou j'en suis :

Pour mon soucis 1 ca fonctionne bien avec cela :
Sub test()
lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("c5:c300").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub
mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes mais
qu'en revanche si il voit qu'entre C5 et C500 il y a des cellules qui
comportent du texte alors qu'il supprime également les lignes. En fait
je souhaite conserver uniquement les lignes qui dans cette plage
comporte une valeur numérique

pour le soucis 2, ca fonctionne aussi avec cela :
Sub Complète_Lignes2()
Range("A5:A300").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
Range("A5:A300").Value = Range("A5:A300").Value
End Sub
mais je ne souhaite pas qu'il s'occupe des 4 premieres lignes (et pour
etre plus precis, la plage en A5 possedera toujours quelque chose et la
fin de la plage aussi, que ce soit en A140 ou A250...) par conséquent,
je souaiterais qu'il mette le chiffre du dessus de A5 jusqu'à la
derniere cellule rempli de la col A.

En esperant avoir été plus clair.
Merci

Manu

"FxM" a écrit dans le message de news:

Bonjour manu,

Rien de tel qu'un peu de lecture de forum et d'analyse de texte aurait
(me semble-t-il) évité de poser ces questions, non ???

Question 1 :
Mon 1er est que je souhaiterais suprimer toute les lignes vides si de
C5 à C500 la cellule n'est pas numérique.

Réponse 1 :
La première chose est que C5 à C500 soient numériques ou pas, si une
valeur est présente dans la cellule, la ligne n'est pas vide ...
Laissons la condition de coté jusqu'à clarification de ta part.

Pour ce qui concerne la suppression, "delete" = effacer, détruire et on
parle de ligne entière donc "entirerow".
Il y a deux fils en cours qui comprennent l'expression
.EntireRow.Delete

Un code parmi tant d'autres :
Sub test()
lx = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("A1:Z1").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub


Question 2 :
Mon 2nd est que si dans une plage de A5 à A300 il y a des cellules
vides, je souhaiterais qu'elles se remplissent du même contenu que la
cellule du dessus.

Réponse 2 :
Avec ce que l'on vient de faire au dessus, il est probable qu'il n'y a
plus grand chose de vide (enfin, j'espère ...).

Même principe de lecture du forum et de recherche sur des vides "blank"

De AV le 22/08 (ce n'est pas si loin) :
Sélection préalable puis :
Sub Complète_Lignes2()
Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
[Selection].Value = [Selection].Value
End Sub
... où l'on remplace aisément "Selection" par Range("A2:A300").
Mais que mettre si A1 est vide ?


Voilà, voilà !

@+
FxM





Bonjour,

Pourriez vous m'aider car j'ai 2 soucis différents,

Mon 1er est que je souhaiterais suprimer toute les lignes vides si de
C5 à C500 la cellule n'est pas numérique.

Mon 2nd est que si dans une plage de A5 à A300 il y a des celulles
vides, je souhaiterais qu'elles se remplissent du meme contenu que la
cellule du dessus.

Merci

Manu












Avatar
AV
Pour la Q1 j'ai ajouter :
[c5:c500].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Et ca à l'air de fonctionner ce qui donne pour finir :


C'est là qu'il faut "finir" !
Cette seule ligne suffit, il n'y a besoin d'aucune autre instruction !

Je n'ai rien trouver en revanche pour la Q2


Il serait bon de la reformuler clairement avec un exemple et le résultat
attendu ...

AV

Avatar
Manu
Non cela ne suffit pas car si je ne met que cette ligne, il me supprime
toutes les lignes qui ont des cellules vides de C5 à C500, alors que je
souhaite aussi qu'il supprime toutes les lignes qui ont des cellules
comportant du texte (n'etant pas numérique) de C5 à C500.

Pour La Question 2,
Le but est que lorsque il voit de A5 jusqu'à la derniere cellule rempli de
cette col. A (et il y a tjrs quelque chose en A5) des cellules vides alors
qu'il me recopi tout simplement la valeur de la cellule supérieur, Fxm m'a
deja bien aidé avec cela et ca fonctionne bien, mais si il n'y a pas de
cellule vide, ca me renvoi le debogueur, j'aurais vou lu qu'il me mette soit
rien ou alors un msgbox m'informant qu'il n'y a pas de cellule vide dans
cette col.
sub test2()
derlig = range("A65536").end(xlup).row
set zone = range("A5:A" & derlig)
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
zone.value = zone.value
end sub

Merci

Manu

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

Pour la Q1 j'ai ajouter :
[c5:c500].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Et ca à l'air de fonctionner ce qui donne pour finir :


C'est là qu'il faut "finir" !
Cette seule ligne suffit, il n'y a besoin d'aucune autre instruction !

Je n'ai rien trouver en revanche pour la Q2


Il serait bon de la reformuler clairement avec un exemple et le résultat
attendu ...

AV




Avatar
AV
En mettant cette instruction
[c5:c500].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
dans ta boucle "For ligne = 500 To 5 Step -1.........Next"
Tu l'exécutes 500 fois !
Est-ce bien raisonnable ?

AV
Avatar
FxM
Bonsoir Manu,

Q1 : Comme AV l'a mentionné, il te faudrait sortir le specialcells de la
boucle pour ne pas répéter cette instruction x fois.
Sub test()
[c5:c500].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
For ligne = 500 To 5 Step -1
If Not IsNumeric(Cells(ligne, "C")) Then
Cells(ligne, "C").EntireRow.Delete shift:=xlUp
End If
Next ligne
End Sub

Si tu avais encore des valeurs non désirées ensuite, il conviendrait de
bien vérifier les formats et détailler le problème. Un affichage '2'
peut être le chiffre 2 (gardé) ou le caractère "2" (enlevé).


Q2 : on ne va pas tester chacune des cellules pour savoir si (etc).
Passage "en force" par un "on error" qui fait passer à la ligne suivante
sans chercher à savoir pourquoi.
sub test2()
derlig = range("A65536").end(xlup).row
set zone = range("A5:A" & derlig)
on error resume next
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
on error goto 0
zone.value = zone.value
end sub


Et un grand merci à AV d'avoir assuré l'intérim :o)

@+
FxM





C'est super car j'ai les explications en meme temps, ca permet de mieux
rentrer dedans. j'ai toutefois enrore 2 ennuis :

Q1
Il supprime bien les lignes dont une des cellules de la col C comporte du
texte, mais ne supprime plus les lignes dont les cellules de la col C sont
vide. Je veux garder uniquement les numériques. alors j'ai fait des tests en
ajoutant cela, If .Cells.Count = Application.CountBlank(.Cells) Then, mais
je n'y arrive pas.

Q2
ca fonctionne tres bien sauf qu'il me met en erreur lorsqu'il n'a pas de
cellule vide, il faudrait dans ces cas là qu'il ne fasse rien.

Merci encore et surtout pour tes explications !

Manu

"FxM" a écrit dans le message de news:

Je te rassure : on a tous démarré un jour ;o)
Alors, un ch'ti coup de pouce ...

-----
Q1 : mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes mais
qu'en revanche si il voit qu'entre C5 et C500 il y a des cellules qui
comportent du texte alors qu'il supprime également les lignes. En fait je
souhaite conserver uniquement les lignes qui dans cette plage comporte une
valeur numérique

Voici ce que fait la macro suivante (attention, je ne dis pas qu'elle fait
ce que tu veux !)

sub test()
'parcourir les lignes de 500 jusqu'à 5 en remontant
for ligne = 500 to 5 step -1

'cells(ligne, "C") est la cellule "Cligne"
'isnumeric(...) retourne vrai si (...) est numérique
'not inverse ce qui suit
'donc si la cellule "Cligne" n'est *pas* numérique alors ...
if not isnumeric(cells(ligne, "C")) then

'alors ... détruire la ligne complète et remonter les autres infos
cells(ligne, "C").entirerow.delete shift:=xlup

'fin de condition
end if

'passer à la ligne suivante (juste au-dessus)
next ligne

end sub


-----
Ma première propo constituait un code parmi d'autres. Voici l'usage des
lignes différentes de ce qui précède :

lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
indique le n° de la ligne comprenant l'élément le plus bas dans les

colonnes C à IV. Retourne une erreur si les colonnes concernées sont
entièrement vides.

With Intersect(Range("c5").EntireColumn, Range("A" & r).EntireRow)
D'une part, Range("c5:c300").EntireColumn est la colonne entière de

C5:C300 en l'occurence la colonne 'C'. De l'autre, Range("A" &
r).EntireRow est la ligne n° r entière. Intersect est l'intersection de
ces zones et donc la cellule 'Cr' que l'on peut simplifier dans ce cas par
range("C" & r)

If .Cells.Count = Application.CountBlank(.Cells) Then
.cells.count est le nombre total de cellules sur une zone donnée

Application.CountBlank(.Cells) est le nombre de cellules vides sur la même
zone. Si ces deux nombres sont égaux, toutes les cellules sont vides
(attention, les commentaires sont ignorés)




-----
Pour ta question 2, il te faut chercher la dernière ligne puisque tu ne
sais pas d'avance où elle se trouve. Par contre, tu indiques que cette
dernière ligne contient quelque chose. Dans ce cas, tu peux utiliser :
derlig = range("A65536").end(xlup).row En gros :
range("A65536") Excel va à la cellule A65536
.end(xlup) puis va à la fin (vers le haut)
.row pour savoir le numéro de la ligne concernée

Ensuite, tu définis la zone sur laquelle agir :
set zone = range("A5:A" & derlig)

... avant d'appliquer une formule .FormulaR1C1 = "=R[-1]C"
uniquement sur les cellules vides .SpecialCells(xlCellTypeBlanks)
de la zone, soit :
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"

tu t'intéresse aux valeurs et pas aux formules :
zone.value = zone.value

Ce qui donne :
sub test2()
derlig = range("A65536").end(xlup).row
set zone = range("A5:A" & derlig)
zone.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
zone.value = zone.value
end sub


Je te laisse jouer :o)

@+
FxM



Merci et tu as raison pour la lecture des ficelles, mais le soucis est
que je suis quasi nul en VBA et j'ai meme du mal à faire des modifs pour
mon probleme avec les elements présents.
Alors voici ou j'en suis :

Pour mon soucis 1 ca fonctionne bien avec cela :
Sub test()
lx = [c:IV].Find("*", [c:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("c5:c300").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub
mais je ne souhaiterais pas qu'il supprime les 4 premiere lignes mais
qu'en revanche si il voit qu'entre C5 et C500 il y a des cellules qui
comportent du texte alors qu'il supprime également les lignes. En fait je
souhaite conserver uniquement les lignes qui dans cette plage comporte
une valeur numérique

pour le soucis 2, ca fonctionne aussi avec cela :
Sub Complète_Lignes2()
Range("A5:A300").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
Range("A5:A300").Value = Range("A5:A300").Value
End Sub
mais je ne souhaite pas qu'il s'occupe des 4 premieres lignes (et pour
etre plus precis, la plage en A5 possedera toujours quelque chose et la
fin de la plage aussi, que ce soit en A140 ou A250...) par conséquent, je
souaiterais qu'il mette le chiffre du dessus de A5 jusqu'à la derniere
cellule rempli de la col A.

En esperant avoir été plus clair.
Merci

Manu

"FxM" a écrit dans le message de news:

Bonjour manu,

Rien de tel qu'un peu de lecture de forum et d'analyse de texte aurait
(me semble-t-il) évité de poser ces questions, non ???

Question 1 :
Mon 1er est que je souhaiterais suprimer toute les lignes vides si de C5
à C500 la cellule n'est pas numérique.

Réponse 1 :
La première chose est que C5 à C500 soient numériques ou pas, si une
valeur est présente dans la cellule, la ligne n'est pas vide ...
Laissons la condition de coté jusqu'à clarification de ta part.

Pour ce qui concerne la suppression, "delete" = effacer, détruire et on
parle de ligne entière donc "entirerow".
Il y a deux fils en cours qui comprennent l'expression .EntireRow.Delete

Un code parmi tant d'autres :
Sub test()
lx = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row
For r = lx To 1 Step -1
With Intersect(Range("A1:Z1").EntireColumn, Range("A" & r).EntireRow)
'cette condition est à revoir !!!
If .Cells.Count = Application.CountBlank(.Cells) Then
.EntireRow.Delete shift:=xlUp
End If
End With
Next r
End Sub


Question 2 :
Mon 2nd est que si dans une plage de A5 à A300 il y a des cellules
vides, je souhaiterais qu'elles se remplissent du même contenu que la
cellule du dessus.

Réponse 2 :
Avec ce que l'on vient de faire au dessus, il est probable qu'il n'y a
plus grand chose de vide (enfin, j'espère ...).

Même principe de lecture du forum et de recherche sur des vides "blank"

De AV le 22/08 (ce n'est pas si loin) :
Sélection préalable puis :
Sub Complète_Lignes2()
Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
[Selection].Value = [Selection].Value
End Sub
... où l'on remplace aisément "Selection" par Range("A2:A300").
Mais que mettre si A1 est vide ?


Voilà, voilà !

@+
FxM





Bonjour,

Pourriez vous m'aider car j'ai 2 soucis différents,

Mon 1er est que je souhaiterais suprimer toute les lignes vides si de
C5 à C500 la cellule n'est pas numérique.

Mon 2nd est que si dans une plage de A5 à A300 il y a des celulles
vides, je souhaiterais qu'elles se remplissent du meme contenu que la
cellule du dessus.

Merci

Manu











1 2