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
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
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
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
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
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
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
With Intersect(Range("c5").EntireColumn, Range("A" & r).EntireRow)
D'une part, Range("c5:c300").EntireColumn est la colonne entière de
If .Cells.Count = Application.CountBlank(.Cells) Then
.cells.count est le nombre total de cellules sur une zone donnée
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à !
@+
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
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
With Intersect(Range("c5").EntireColumn, Range("A" & r).EntireRow)
D'une part, Range("c5:c300").EntireColumn est la colonne entière de
If .Cells.Count = Application.CountBlank(.Cells) Then
.cells.count est le nombre total de cellules sur une zone donnée
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
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
With Intersect(Range("c5").EntireColumn, Range("A" & r).EntireRow)
D'une part, Range("c5:c300").EntireColumn est la colonne entière de
If .Cells.Count = Application.CountBlank(.Cells) Then
.cells.count est le nombre total de cellules sur une zone donnée
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à !
@+
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
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
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
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
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
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
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
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)
@+
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
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
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)
@+
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
Pour la Q1 j'ai ajouter :
[c5:c500].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Et ca à l'air de fonctionner ce qui donne pour finir :
Je n'ai rien trouver en revanche pour la Q2
Pour la Q1 j'ai ajouter :
[c5:c500].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Et ca à l'air de fonctionner ce qui donne pour finir :
Je n'ai rien trouver en revanche pour la Q2
Pour la Q1 j'ai ajouter :
[c5:c500].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Et ca à l'air de fonctionner ce qui donne pour finir :
Je n'ai rien trouver en revanche pour la Q2
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
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
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
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)
@+
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
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
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)
@+
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