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)
@+
FxMC'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)
@+
FxMMerci 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à !
@+
FxMBonjour,
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
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" <nullos@greuchmeu.ici> a écrit dans le message de news:
u9pQkcHyGHA.4024@TK2MSFTNGP02.phx.gbl...
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" <nullos@greuchmeu.ici> a écrit dans le message de news:
OtpI0EFyGHA.4336@TK2MSFTNGP06.phx.gbl...
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
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)
@+
FxMC'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)
@+
FxMMerci 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à !
@+
FxMBonjour,
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