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

recopie par macro fautive si cellule copiée vide

10 réponses
Avatar
J
Bonjour à tous
Dans une feuille je récapitule des données provenant des nombreuses
feuilles d'un classeur avec la macro suivante.
Cela fonctionne bien sauf si une cellule est vide dans une feuille, par
exemple [R24], car la valeur de [R24] relevée dans la feuille suivante
sera décalée vers le haut dans ma feuille de récap. Malheur ...

Comment ajouter un petit quelque chose pour que, s'il n' y a pas eu de
saisie, la cellule de ma feuille de récap reste vide ou contienne un
signe convenu "-" par exemple.

'*********
For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Range("B65536").End(xlUp)(2).Value = .Name
Worksheets("CSN").Range("C65536").End(xlUp)(2).Value = .[R22]
Worksheets("CSN").Range("D65536").End(xlUp)(2).Value = .[R24]
'etc etc
End With
Next Feuille
'*********

Merci pour l'aide
@+
J@@

10 réponses

Avatar
Ardus Petus
Worksheets("CSN").Range("D65536").End(xlUp)(2).Value =
iif(isEmpty(.[R24]),"-",".[R24])

HTH
--
AP


"J@@" a écrit dans le message de news:

Bonjour à tous
Dans une feuille je récapitule des données provenant des nombreuses
feuilles d'un classeur avec la macro suivante.
Cela fonctionne bien sauf si une cellule est vide dans une feuille, par
exemple [R24], car la valeur de [R24] relevée dans la feuille suivante
sera décalée vers le haut dans ma feuille de récap. Malheur ...

Comment ajouter un petit quelque chose pour que, s'il n' y a pas eu de
saisie, la cellule de ma feuille de récap reste vide ou contienne un signe
convenu "-" par exemple.

'*********
For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Range("B65536").End(xlUp)(2).Value = .Name
Worksheets("CSN").Range("C65536").End(xlUp)(2).Value = .[R22]
Worksheets("CSN").Range("D65536").End(xlUp)(2).Value = .[R24]
'etc etc
End With
Next Feuille
'*********

Merci pour l'aide
@+
J@@


Avatar
Ardus Petus
Bonjour Ji

Autre solution, plus définitive:

'-------------------------------------------------
Dim lDerLig as long

lDerlig=Worksheets("CSN").Range("B65536").End(xlUp)(2).Row

For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Cells(lDerlig,"B").Value = .Name
Worksheets("CSN").Cells(lDerlig,"C").Value = .[R22]
Worksheets("CSN").Cells(lDerlig,"D").Value = .[R24]
'etc etc
End With
Next Feuille
'------------------------------------------------

Cordialement,
--
AP


"J@@" a écrit dans le message de news:

Bonjour à tous
Dans une feuille je récapitule des données provenant des nombreuses
feuilles d'un classeur avec la macro suivante.
Cela fonctionne bien sauf si une cellule est vide dans une feuille, par
exemple [R24], car la valeur de [R24] relevée dans la feuille suivante
sera décalée vers le haut dans ma feuille de récap. Malheur ...

Comment ajouter un petit quelque chose pour que, s'il n' y a pas eu de
saisie, la cellule de ma feuille de récap reste vide ou contienne un signe
convenu "-" par exemple.

'*********
For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Range("B65536").End(xlUp)(2).Value = .Name
Worksheets("CSN").Range("C65536").End(xlUp)(2).Value = .[R22]
Worksheets("CSN").Range("D65536").End(xlUp)(2).Value = .[R24]
'etc etc
End With
Next Feuille
'*********

Merci pour l'aide
@+
J@@


Avatar
FxM
Bonjour,

La colonne B ne contient peut-être pas le plus de données.
Pour trouver la dernière ligne de toutes les colonnes, AV nous a cité :
derlig = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row

@+
FxM


Bonjour Ji

Autre solution, plus définitive:

'-------------------------------------------------
Dim lDerLig as long

lDerlig=Worksheets("CSN").Range("B65536").End(xlUp)(2).Row

For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Cells(lDerlig,"B").Value = .Name
Worksheets("CSN").Cells(lDerlig,"C").Value = .[R22]
Worksheets("CSN").Cells(lDerlig,"D").Value = .[R24]
'etc etc
End With
Next Feuille
'------------------------------------------------

Cordialement,
--
AP


"J@@" a écrit dans le message de news:

Bonjour à tous
Dans une feuille je récapitule des données provenant des nombreuses
feuilles d'un classeur avec la macro suivante.
Cela fonctionne bien sauf si une cellule est vide dans une feuille, par
exemple [R24], car la valeur de [R24] relevée dans la feuille suivante
sera décalée vers le haut dans ma feuille de récap. Malheur ...

Comment ajouter un petit quelque chose pour que, s'il n' y a pas eu de
saisie, la cellule de ma feuille de récap reste vide ou contienne un signe
convenu "-" par exemple.

'*********
For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Range("B65536").End(xlUp)(2).Value = .Name
Worksheets("CSN").Range("C65536").End(xlUp)(2).Value = .[R22]
Worksheets("CSN").Range("D65536").End(xlUp)(2).Value = .[R24]
'etc etc
End With
Next Feuille
'*********

Merci pour l'aide
@+
J@@






Avatar
Ardus Petus
La colonne B contient toujours le nom de la feuille.

--
AP

"FxM" a écrit dans le message de news:
%
Bonjour,

La colonne B ne contient peut-être pas le plus de données.
Pour trouver la dernière ligne de toutes les colonnes, AV nous a cité :
derlig = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row

@+
FxM


Bonjour Ji

Autre solution, plus définitive:

'-------------------------------------------------
Dim lDerLig as long

lDerlig=Worksheets("CSN").Range("B65536").End(xlUp)(2).Row

For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Cells(lDerlig,"B").Value = .Name
Worksheets("CSN").Cells(lDerlig,"C").Value = .[R22]
Worksheets("CSN").Cells(lDerlig,"D").Value = .[R24]
'etc etc
End With
Next Feuille
'------------------------------------------------

Cordialement,
--
AP


"J@@" a écrit dans le message de news:

Bonjour à tous
Dans une feuille je récapitule des données provenant des nombreuses
feuilles d'un classeur avec la macro suivante.
Cela fonctionne bien sauf si une cellule est vide dans une feuille, par
exemple [R24], car la valeur de [R24] relevée dans la feuille suivante
sera décalée vers le haut dans ma feuille de récap. Malheur ...

Comment ajouter un petit quelque chose pour que, s'il n' y a pas eu de
saisie, la cellule de ma feuille de récap reste vide ou contienne un
signe convenu "-" par exemple.

'*********
For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Range("B65536").End(xlUp)(2).Value = .Name
Worksheets("CSN").Range("C65536").End(xlUp)(2).Value = .[R22]
Worksheets("CSN").Range("D65536").End(xlUp)(2).Value = .[R24]
'etc etc
End With
Next Feuille
'*********

Merci pour l'aide
@+
J@@







Avatar
FxM
Ok, sorry
Fx


La colonne B contient toujours le nom de la feuille.

--
AP

"FxM" a écrit dans le message de news:
%
Bonjour,

La colonne B ne contient peut-être pas le plus de données.
Pour trouver la dernière ligne de toutes les colonnes, AV nous a cité :
derlig = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row

@+
FxM


Bonjour Ji

Autre solution, plus définitive:

'-------------------------------------------------
Dim lDerLig as long

lDerlig=Worksheets("CSN").Range("B65536").End(xlUp)(2).Row

For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Cells(lDerlig,"B").Value = .Name
Worksheets("CSN").Cells(lDerlig,"C").Value = .[R22]
Worksheets("CSN").Cells(lDerlig,"D").Value = .[R24]
'etc etc
End With
Next Feuille
'------------------------------------------------

Cordialement,
--
AP


"J@@" a écrit dans le message de news:

Bonjour à tous
Dans une feuille je récapitule des données provenant des nombreuses
feuilles d'un classeur avec la macro suivante.
Cela fonctionne bien sauf si une cellule est vide dans une feuille, par
exemple [R24], car la valeur de [R24] relevée dans la feuille suivante
sera décalée vers le haut dans ma feuille de récap. Malheur ...

Comment ajouter un petit quelque chose pour que, s'il n' y a pas eu de
saisie, la cellule de ma feuille de récap reste vide ou contienne un
signe convenu "-" par exemple.

'*********
For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Range("B65536").End(xlUp)(2).Value = .Name
Worksheets("CSN").Range("C65536").End(xlUp)(2).Value = .[R22]
Worksheets("CSN").Range("D65536").End(xlUp)(2).Value = .[R24]
'etc etc
End With
Next Feuille
'*********

Merci pour l'aide
@+
J@@









Avatar
J
Bonjour Ardus
cette ligne fonctionne bien, mais c'est vrai que cela fait bcp de
modifications, et que si j'arrive à utiliser ta solution plus définitive
suivante, cela me simplifiera la vie.
En effet, quand je fais ces macros de recap, je fais tout "à la main"
merci pour l'aide
@+
J@@


Worksheets("CSN").Range("D65536").End(xlUp)(2).Value =
IIf(IsEmpty(.[R24]), "-", .[R24])


Worksheets("CSN").Range("D65536").End(xlUp)(2).Value =
iif(isEmpty(.[R24]),"-",".[R24])

HTH
--
AP


Avatar
J
Bonjour Ardus
cela fonctionne, mais les données viennent toutes se coller en ligne 3,
qui est la première ligne de recopie des données, les unes par dessus
les autres. Au final je n'ai d'apparent que les données de la dernière
feuille.

j'ai essayé lDerlig=lDerlig +1
mais tout se colle alors en ligne 4, VBA m'obéit rarement :-<
Comment faire, steplait :-)
Merci
J@@

Autre solution, plus définitive:

'-------------------------------------------------
Dim lDerLig as long

lDerlig=Worksheets("CSN").Range("B65536").End(xlUp)(2).Row

For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
Worksheets("CSN").Cells(lDerlig,"B").Value = .Name
Worksheets("CSN").Cells(lDerlig,"C").Value = .[R22]
Worksheets("CSN").Cells(lDerlig,"D").Value = .[R24]
'etc etc
End With
Next Feuille
'------------------------------------------------



Avatar
J
Bonjour François-Xavier
la vie est bien dure ;-)
ta derlig, mise à la place du derlig de la macro de Ardus, me copie
pareillement tout sur la même ligne, mais la dernière en bas du tableau.

En effet, il existe en colonne L des formules, qui sont reconnues par
ton derlig, et les données se placent au niveau de la dernière ligne,
sans remplir harmonieusement mon tableau.

comment adapter ces codes?
merci encore
@+
J@@

Bonjour,

La colonne B ne contient peut-être pas le plus de données.
Pour trouver la dernière ligne de toutes les colonnes, AV nous a cité :
derlig = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row

@+
FxM



Avatar
FxM
Bonsoir J@@,

Il te faut deux adaptations :
- tu ne souhaites pas remplir la derlig mais derlig+1
- il faut que tu déplaces la détermination de derlig dans ta boucle.

Ce qui te donnerait :
(snip)
Dim lDerLig as long

For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
lDerlig=Worksheets("CSN").Range("B65536").End(xlUp)(2).Row +1
Worksheets("CSN").Cells(lDerlig,"B").Value = .Name
Worksheets("CSN").Cells(lDerlig,"C").Value = .[R22]
Worksheets("CSN").Cells(lDerlig,"D").Value = .[R24]
'etc etc
End With
Next Feuille

@+
FxM

Bonjour François-Xavier
la vie est bien dure ;-)
ta derlig, mise à la place du derlig de la macro de Ardus, me copie
pareillement tout sur la même ligne, mais la dernière en bas du tableau.

En effet, il existe en colonne L des formules, qui sont reconnues par
ton derlig, et les données se placent au niveau de la dernière ligne,
sans remplir harmonieusement mon tableau.

comment adapter ces codes?
merci encore
@+
J@@

Bonjour,

La colonne B ne contient peut-être pas le plus de données.
Pour trouver la dernière ligne de toutes les colonnes, AV nous a cité :
derlig = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row

@+
FxM






Avatar
J
Bonsoir FxM (jour ici)
J'ai retiré le (2) qui me mettait une ligne blanche entre chaque
écriture, et maintenant tout va bien.

lDerlig=Worksheets("CSN").Range("B65536").End(xlUp).Row +1

Merci
Si j'y consacre assez de temps et de sérieux, quand on sera à Excel 28,
j'y arriverai aussi :-)
amicalement
@+
J@@


Il te faut deux adaptations :
- tu ne souhaites pas remplir la derlig mais derlig+1
- il faut que tu déplaces la détermination de derlig dans ta boucle.

Ce qui te donnerait :
(snip)
Dim lDerLig as long

For Each Feuille In ActiveWorkbook.Worksheets
With Feuille
lDerlig=Worksheets("CSN").Range("B65536").End(xlUp)(2).Row +1
Worksheets("CSN").Cells(lDerlig,"B").Value = .Name
Worksheets("CSN").Cells(lDerlig,"C").Value = .[R22]
Worksheets("CSN").Cells(lDerlig,"D").Value = .[R24]
'etc etc
End With
Next Feuille

ta derlig, mise à la place du derlig de la macro de Ardus, me copie
pareillement tout sur la même ligne, mais la dernière en bas du tableau.

En effet, il existe en colonne L des formules, qui sont reconnues par
ton derlig, et les données se placent au niveau de la dernière ligne,
sans remplir harmonieusement mon tableau.

Pour trouver la dernière ligne de toutes les colonnes, AV nous a cité :
derlig = [A:IV].Find("*", [A:IV].Item(1), , , , xlPrevious).Row