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

Code VBA pour recopier dans les lignes non vides

8 réponses
Avatar
Soya
Bonjour !

Voici un exemple de tableau, qui peut avoir jusqu'à 20 mille lignes :

a b c d
1 Code Opér montant Total
2 4100 aaa xxxx xxxx
3 bbb xxxx xxxx
4 ccc xxxx xxx
5 4215 ddd xxx xx
6 eee xxx xxx

et ainsi de suite...
Quel est le code pour faire une macro qui irait identifier le premier code,
à partir de la ligne 2, et qui le recopierait dans chaque cellule vide de la
colonne A, jusqu'à ce qu'elle rencontre le second code, qu'elle recopierait
dans les cellules vides en dessous, jusqu'au 3ème... etc. Dans l'exemple,
elle recopierait 4100 jusqu'à la ligne 4 (ccc), puis ensuite 4215 jusqu'à la
ligne 6, etc.

Merci éperdument.
Soya.

ps : en prime, pour un sou de plus, j'aimerais bien aussi qu'elle identifie
les lignes vides (de b à zz) et qu'elle les supprime. Mais je la voudrais à
part. Quelle exigence !

8 réponses

Avatar
Soya
MichDenis, ça ne fonctionne pas. Voici le genre de résultat que j'obtiens :

TD General Account
Sorted by: Date 04-01-06
Sorted by: Date 04-01-06
#N/A 04-03-06
#N/A 04-03-06

Je voudrais qu'il recopie TD, et pas le Sorted by qui se trouve au dessus.
C'est pour cela que je spécifiais qu'il devait démarrer à partir de la ligne
2. Ensuite, quand il rencontre un autre code (que ce soit 4215 ou TD Special
account par exemple), votre solution me recopie tout le temps :"Sorted By".
Quel est mon problème ?


As tu un vrai problème... pour celui-ci, il y a :

Et tu adaptes le nom de ta feuille dans la procédure.
'---------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row) _
.SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
.Value = .Value
End With
End With
End Sub
'---------------------


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

Bonjour !

Voici un exemple de tableau, qui peut avoir jusqu'à 20 mille lignes :

a b c d
1 Code Opér montant Total
2 4100 aaa xxxx xxxx
3 bbb xxxx xxxx
4 ccc xxxx xxx
5 4215 ddd xxx xx
6 eee xxx xxx

et ainsi de suite...
Quel est le code pour faire une macro qui irait identifier le premier code,
à partir de la ligne 2, et qui le recopierait dans chaque cellule vide de la
colonne A, jusqu'à ce qu'elle rencontre le second code, qu'elle recopierait
dans les cellules vides en dessous, jusqu'au 3ème... etc. Dans l'exemple,
elle recopierait 4100 jusqu'à la ligne 4 (ccc), puis ensuite 4215 jusqu'à la
ligne 6, etc.

Merci éperdument.
Soya.

ps : en prime, pour un sou de plus, j'aimerais bien aussi qu'elle identifie
les lignes vides (de b à zz) et qu'elle les supprime. Mais je la voudrais à
part. Quelle exigence !





Avatar
MichDenis
il manquait 2 lignes de code pour te permettre d'enlever les formules sans problèmes

'------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
With .SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
End With
t = .Value
.Value = t
End With
End With
End Sub
'------------------------------



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

MichDenis, ça ne fonctionne pas. Voici le genre de résultat que j'obtiens :

TD General Account
Sorted by: Date 04-01-06
Sorted by: Date 04-01-06
#N/A 04-03-06
#N/A 04-03-06

Je voudrais qu'il recopie TD, et pas le Sorted by qui se trouve au dessus.
C'est pour cela que je spécifiais qu'il devait démarrer à partir de la ligne
2. Ensuite, quand il rencontre un autre code (que ce soit 4215 ou TD Special
account par exemple), votre solution me recopie tout le temps :"Sorted By".
Quel est mon problème ?


As tu un vrai problème... pour celui-ci, il y a :

Et tu adaptes le nom de ta feuille dans la procédure.
'---------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row) _
.SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
.Value = .Value
End With
End With
End Sub
'---------------------


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

Bonjour !

Voici un exemple de tableau, qui peut avoir jusqu'à 20 mille lignes :

a b c d
1 Code Opér montant Total
2 4100 aaa xxxx xxxx
3 bbb xxxx xxxx
4 ccc xxxx xxx
5 4215 ddd xxx xx
6 eee xxx xxx

et ainsi de suite...
Quel est le code pour faire une macro qui irait identifier le premier code,
à partir de la ligne 2, et qui le recopierait dans chaque cellule vide de la
colonne A, jusqu'à ce qu'elle rencontre le second code, qu'elle recopierait
dans les cellules vides en dessous, jusqu'au 3ème... etc. Dans l'exemple,
elle recopierait 4100 jusqu'à la ligne 4 (ccc), puis ensuite 4215 jusqu'à la
ligne 6, etc.

Merci éperdument.
Soya.

ps : en prime, pour un sou de plus, j'aimerais bien aussi qu'elle identifie
les lignes vides (de b à zz) et qu'elle les supprime. Mais je la voudrais à
part. Quelle exigence !





Avatar
Soya
Bonjour MichDenis,

Ça fonctionne ! Et oui, j'avais bien fait une copie de test avant de
massacrer mon fichier :)

J'ai une petite question : Comment faire pour que la portion A1 dans "With
.Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?
Est-ce que c'est possible ?

Merci encore !


il manquait 2 lignes de code pour te permettre d'enlever les formules sans problèmes

'------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
With .SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
End With
t = .Value
.Value = t
End With
End With
End Sub
'------------------------------



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

MichDenis, ça ne fonctionne pas. Voici le genre de résultat que j'obtiens :

TD General Account
Sorted by: Date 04-01-06
Sorted by: Date 04-01-06
#N/A 04-03-06
#N/A 04-03-06

Je voudrais qu'il recopie TD, et pas le Sorted by qui se trouve au dessus.
C'est pour cela que je spécifiais qu'il devait démarrer à partir de la ligne
2. Ensuite, quand il rencontre un autre code (que ce soit 4215 ou TD Special
account par exemple), votre solution me recopie tout le temps :"Sorted By".
Quel est mon problème ?


As tu un vrai problème... pour celui-ci, il y a :

Et tu adaptes le nom de ta feuille dans la procédure.
'---------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row) _
.SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
.Value = .Value
End With
End With
End Sub
'---------------------


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

Bonjour !

Voici un exemple de tableau, qui peut avoir jusqu'à 20 mille lignes :

a b c d
1 Code Opér montant Total
2 4100 aaa xxxx xxxx
3 bbb xxxx xxxx
4 ccc xxxx xxx
5 4215 ddd xxx xx
6 eee xxx xxx

et ainsi de suite...
Quel est le code pour faire une macro qui irait identifier le premier code,
à partir de la ligne 2, et qui le recopierait dans chaque cellule vide de la
colonne A, jusqu'à ce qu'elle rencontre le second code, qu'elle recopierait
dans les cellules vides en dessous, jusqu'au 3ème... etc. Dans l'exemple,
elle recopierait 4100 jusqu'à la ligne 4 (ccc), puis ensuite 4215 jusqu'à la
ligne 6, etc.

Merci éperdument.
Soya.

ps : en prime, pour un sou de plus, j'aimerais bien aussi qu'elle identifie
les lignes vides (de b à zz) et qu'elle les supprime. Mais je la voudrais à
part. Quelle exigence !










Avatar
MichDenis
| Comment faire pour que la portion A1 dans "With
| .Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?

Peux-tu expliquer davantage ce que tu attends par variable
à propos de cette ligne de code ? Qu'est-ce que tu voudrais en faire ?





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

Bonjour MichDenis,

Ça fonctionne ! Et oui, j'avais bien fait une copie de test avant de
massacrer mon fichier :)

J'ai une petite question : Comment faire pour que la portion A1 dans "With
.Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?
Est-ce que c'est possible ?

Merci encore !


il manquait 2 lignes de code pour te permettre d'enlever les formules sans problèmes

'------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
With .SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
End With
t = .Value
.Value = t
End With
End With
End Sub
'------------------------------



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

MichDenis, ça ne fonctionne pas. Voici le genre de résultat que j'obtiens :

TD General Account
Sorted by: Date 04-01-06
Sorted by: Date 04-01-06
#N/A 04-03-06
#N/A 04-03-06

Je voudrais qu'il recopie TD, et pas le Sorted by qui se trouve au dessus.
C'est pour cela que je spécifiais qu'il devait démarrer à partir de la ligne
2. Ensuite, quand il rencontre un autre code (que ce soit 4215 ou TD Special
account par exemple), votre solution me recopie tout le temps :"Sorted By".
Quel est mon problème ?


As tu un vrai problème... pour celui-ci, il y a :

Et tu adaptes le nom de ta feuille dans la procédure.
'---------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row) _
.SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
.Value = .Value
End With
End With
End Sub
'---------------------


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

Bonjour !

Voici un exemple de tableau, qui peut avoir jusqu'à 20 mille lignes :

a b c d
1 Code Opér montant Total
2 4100 aaa xxxx xxxx
3 bbb xxxx xxxx
4 ccc xxxx xxx
5 4215 ddd xxx xx
6 eee xxx xxx

et ainsi de suite...
Quel est le code pour faire une macro qui irait identifier le premier code,
à partir de la ligne 2, et qui le recopierait dans chaque cellule vide de la
colonne A, jusqu'à ce qu'elle rencontre le second code, qu'elle recopierait
dans les cellules vides en dessous, jusqu'au 3ème... etc. Dans l'exemple,
elle recopierait 4100 jusqu'à la ligne 4 (ccc), puis ensuite 4215 jusqu'à la
ligne 6, etc.

Merci éperdument.
Soya.

ps : en prime, pour un sou de plus, j'aimerais bien aussi qu'elle identifie
les lignes vides (de b à zz) et qu'elle les supprime. Mais je la voudrais à
part. Quelle exigence !










Avatar
Soya
Et bien voilà...

Les tableaux auxquels s'appliquent cette macro ne nous arrivent pas tous au
même format. Les données à recopier de certains se trouvent dans la colonne
A, ou B, ou B et C.

Est-il possible de choisir la colonne, sans que la personne qui utilise le
tableau ait à entrer dans le code pour le modifier ?

Merci de votre temps !


| Comment faire pour que la portion A1 dans "With
| .Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?

Peux-tu expliquer davantage ce que tu attends par variable
à propos de cette ligne de code ? Qu'est-ce que tu voudrais en faire ?





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

Bonjour MichDenis,

Ça fonctionne ! Et oui, j'avais bien fait une copie de test avant de
massacrer mon fichier :)

J'ai une petite question : Comment faire pour que la portion A1 dans "With
..Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?
Est-ce que c'est possible ?

Merci encore !


il manquait 2 lignes de code pour te permettre d'enlever les formules sans problèmes

'------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
With .SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
End With
t = .Value
.Value = t
End With
End With
End Sub
'------------------------------



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

MichDenis, ça ne fonctionne pas. Voici le genre de résultat que j'obtiens :

TD General Account
Sorted by: Date 04-01-06
Sorted by: Date 04-01-06
#N/A 04-03-06
#N/A 04-03-06

Je voudrais qu'il recopie TD, et pas le Sorted by qui se trouve au dessus.
C'est pour cela que je spécifiais qu'il devait démarrer à partir de la ligne
2. Ensuite, quand il rencontre un autre code (que ce soit 4215 ou TD Special
account par exemple), votre solution me recopie tout le temps :"Sorted By".
Quel est mon problème ?


As tu un vrai problème... pour celui-ci, il y a :

Et tu adaptes le nom de ta feuille dans la procédure.
'---------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row) _
.SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
.Value = .Value
End With
End With
End Sub
'---------------------


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

Bonjour !

Voici un exemple de tableau, qui peut avoir jusqu'à 20 mille lignes :

a b c d
1 Code Opér montant Total
2 4100 aaa xxxx xxxx
3 bbb xxxx xxxx
4 ccc xxxx xxx
5 4215 ddd xxx xx
6 eee xxx xxx

et ainsi de suite...
Quel est le code pour faire une macro qui irait identifier le premier code,
à partir de la ligne 2, et qui le recopierait dans chaque cellule vide de la
colonne A, jusqu'à ce qu'elle rencontre le second code, qu'elle recopierait
dans les cellules vides en dessous, jusqu'au 3ème... etc. Dans l'exemple,
elle recopierait 4100 jusqu'à la ligne 4 (ccc), puis ensuite 4215 jusqu'à la
ligne 6, etc.

Merci éperdument.
Soya.

ps : en prime, pour un sou de plus, j'aimerais bien aussi qu'elle identifie
les lignes vides (de b à zz) et qu'elle les supprime. Mais je la voudrais à
part. Quelle exigence !















Avatar
Soya
Ou alors, si on doit le faire manuellement, qu'est ce que je dois changer
dans le code lorsqu'il s'agit de la colonne B ? J'ai changé pour "B1:B", mais
il m'indique que dans la ligne suivante du code, il y a une incompatibilité.
Et comme c'est un peu du chinois pour moi, je ne sais pas quoi changer.
L'adresse ?


| Comment faire pour que la portion A1 dans "With
| .Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?

Peux-tu expliquer davantage ce que tu attends par variable
à propos de cette ligne de code ? Qu'est-ce que tu voudrais en faire ?





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

Bonjour MichDenis,

Ça fonctionne ! Et oui, j'avais bien fait une copie de test avant de
massacrer mon fichier :)

J'ai une petite question : Comment faire pour que la portion A1 dans "With
..Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?
Est-ce que c'est possible ?

Merci encore !


il manquait 2 lignes de code pour te permettre d'enlever les formules sans problèmes

'------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
With .SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
End With
t = .Value
.Value = t
End With
End With
End Sub
'------------------------------



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

MichDenis, ça ne fonctionne pas. Voici le genre de résultat que j'obtiens :

TD General Account
Sorted by: Date 04-01-06
Sorted by: Date 04-01-06
#N/A 04-03-06
#N/A 04-03-06

Je voudrais qu'il recopie TD, et pas le Sorted by qui se trouve au dessus.
C'est pour cela que je spécifiais qu'il devait démarrer à partir de la ligne
2. Ensuite, quand il rencontre un autre code (que ce soit 4215 ou TD Special
account par exemple), votre solution me recopie tout le temps :"Sorted By".
Quel est mon problème ?


As tu un vrai problème... pour celui-ci, il y a :

Et tu adaptes le nom de ta feuille dans la procédure.
'---------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row) _
.SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
.Value = .Value
End With
End With
End Sub
'---------------------


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

Bonjour !

Voici un exemple de tableau, qui peut avoir jusqu'à 20 mille lignes :

a b c d
1 Code Opér montant Total
2 4100 aaa xxxx xxxx
3 bbb xxxx xxxx
4 ccc xxxx xxx
5 4215 ddd xxx xx
6 eee xxx xxx

et ainsi de suite...
Quel est le code pour faire une macro qui irait identifier le premier code,
à partir de la ligne 2, et qui le recopierait dans chaque cellule vide de la
colonne A, jusqu'à ce qu'elle rencontre le second code, qu'elle recopierait
dans les cellules vides en dessous, jusqu'au 3ème... etc. Dans l'exemple,
elle recopierait 4100 jusqu'à la ligne 4 (ccc), puis ensuite 4215 jusqu'à la
ligne 6, etc.

Merci éperdument.
Soya.

ps : en prime, pour un sou de plus, j'aimerais bien aussi qu'elle identifie
les lignes vides (de b à zz) et qu'elle les supprime. Mais je la voudrais à
part. Quelle exigence !















Avatar
MichDenis
Ce qui suit devrait fonctionner peu importe la colonne,
tu ne dois changer que le nom de la feuille si nécessaire
et l'adresse des cellules ...

Évidemment, si dans la colonne B1:Bx, il n'y a pas de
cellules vides, une erreur sera générée à cause de la méthode
SpecialCells qui retourne toujours une erreur lorsqu'elle ne trouve
pas de cellules corrrespondantes....Tu peux pallier à ceci en
ajoutant en début de procédure :
On Error Resume Next

'----------------------------
Sub test()

On Error Resume Next
With Worksheets("Feuil1")
With .Range("B1:B" & .Range("B65536").End(xlUp).Row)
With .SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
End With
t = .Value
.Value = t
End With
End With
End Sub
'----------------------------



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

Ou alors, si on doit le faire manuellement, qu'est ce que je dois changer
dans le code lorsqu'il s'agit de la colonne B ? J'ai changé pour "B1:B", mais
il m'indique que dans la ligne suivante du code, il y a une incompatibilité.
Et comme c'est un peu du chinois pour moi, je ne sais pas quoi changer.
L'adresse ?


| Comment faire pour que la portion A1 dans "With
| .Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?

Peux-tu expliquer davantage ce que tu attends par variable
à propos de cette ligne de code ? Qu'est-ce que tu voudrais en faire ?





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

Bonjour MichDenis,

Ça fonctionne ! Et oui, j'avais bien fait une copie de test avant de
massacrer mon fichier :)

J'ai une petite question : Comment faire pour que la portion A1 dans "With
..Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?
Est-ce que c'est possible ?

Merci encore !


il manquait 2 lignes de code pour te permettre d'enlever les formules sans problèmes

'------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
With .SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
End With
t = .Value
.Value = t
End With
End With
End Sub
'------------------------------



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

MichDenis, ça ne fonctionne pas. Voici le genre de résultat que j'obtiens :

TD General Account
Sorted by: Date 04-01-06
Sorted by: Date 04-01-06
#N/A 04-03-06
#N/A 04-03-06

Je voudrais qu'il recopie TD, et pas le Sorted by qui se trouve au dessus.
C'est pour cela que je spécifiais qu'il devait démarrer à partir de la ligne
2. Ensuite, quand il rencontre un autre code (que ce soit 4215 ou TD Special
account par exemple), votre solution me recopie tout le temps :"Sorted By".
Quel est mon problème ?


As tu un vrai problème... pour celui-ci, il y a :

Et tu adaptes le nom de ta feuille dans la procédure.
'---------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row) _
.SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
.Value = .Value
End With
End With
End Sub
'---------------------


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

Bonjour !

Voici un exemple de tableau, qui peut avoir jusqu'à 20 mille lignes :

a b c d
1 Code Opér montant Total
2 4100 aaa xxxx xxxx
3 bbb xxxx xxxx
4 ccc xxxx xxx
5 4215 ddd xxx xx
6 eee xxx xxx

et ainsi de suite...
Quel est le code pour faire une macro qui irait identifier le premier code,
à partir de la ligne 2, et qui le recopierait dans chaque cellule vide de la
colonne A, jusqu'à ce qu'elle rencontre le second code, qu'elle recopierait
dans les cellules vides en dessous, jusqu'au 3ème... etc. Dans l'exemple,
elle recopierait 4100 jusqu'à la ligne 4 (ccc), puis ensuite 4215 jusqu'à la
ligne 6, etc.

Merci éperdument.
Soya.

ps : en prime, pour un sou de plus, j'aimerais bien aussi qu'elle identifie
les lignes vides (de b à zz) et qu'elle les supprime. Mais je la voudrais à
part. Quelle exigence !















Avatar
Soya
Quelle oie ! Je ne changeais que le A1:A et je ne changeais pas le A65536...

"C'est la faute à l'ordinateur !" :)

Merci encore pour votre disponibilité. C'est très apprécié.


Ce qui suit devrait fonctionner peu importe la colonne,
tu ne dois changer que le nom de la feuille si nécessaire
et l'adresse des cellules ...

Évidemment, si dans la colonne B1:Bx, il n'y a pas de
cellules vides, une erreur sera générée à cause de la méthode
SpecialCells qui retourne toujours une erreur lorsqu'elle ne trouve
pas de cellules corrrespondantes....Tu peux pallier à ceci en
ajoutant en début de procédure :
On Error Resume Next

'----------------------------
Sub test()

On Error Resume Next
With Worksheets("Feuil1")
With .Range("B1:B" & .Range("B65536").End(xlUp).Row)
With .SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
End With
t = .Value
.Value = t
End With
End With
End Sub
'----------------------------



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

Ou alors, si on doit le faire manuellement, qu'est ce que je dois changer
dans le code lorsqu'il s'agit de la colonne B ? J'ai changé pour "B1:B", mais
il m'indique que dans la ligne suivante du code, il y a une incompatibilité.
Et comme c'est un peu du chinois pour moi, je ne sais pas quoi changer.
L'adresse ?


| Comment faire pour que la portion A1 dans "With
| .Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?

Peux-tu expliquer davantage ce que tu attends par variable
à propos de cette ligne de code ? Qu'est-ce que tu voudrais en faire ?





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

Bonjour MichDenis,

Ça fonctionne ! Et oui, j'avais bien fait une copie de test avant de
massacrer mon fichier :)

J'ai une petite question : Comment faire pour que la portion A1 dans "With
..Range("A1:A" & .Range("A65536").End(xlUp).Row)" devienne une variable ?
Est-ce que c'est possible ?

Merci encore !


il manquait 2 lignes de code pour te permettre d'enlever les formules sans problèmes

'------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
With .SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
End With
t = .Value
.Value = t
End With
End With
End Sub
'------------------------------



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

MichDenis, ça ne fonctionne pas. Voici le genre de résultat que j'obtiens :

TD General Account
Sorted by: Date 04-01-06
Sorted by: Date 04-01-06
#N/A 04-03-06
#N/A 04-03-06

Je voudrais qu'il recopie TD, et pas le Sorted by qui se trouve au dessus.
C'est pour cela que je spécifiais qu'il devait démarrer à partir de la ligne
2. Ensuite, quand il rencontre un autre code (que ce soit 4215 ou TD Special
account par exemple), votre solution me recopie tout le temps :"Sorted By".
Quel est mon problème ?


As tu un vrai problème... pour celui-ci, il y a :

Et tu adaptes le nom de ta feuille dans la procédure.
'---------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row) _
.SpecialCells(xlCellTypeBlanks)
.Formula = "=" & .Item(1).Offset(-1).Address(0, 0)
.Value = .Value
End With
End With
End Sub
'---------------------


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

Bonjour !

Voici un exemple de tableau, qui peut avoir jusqu'à 20 mille lignes :

a b c d
1 Code Opér montant Total
2 4100 aaa xxxx xxxx
3 bbb xxxx xxxx
4 ccc xxxx xxx
5 4215 ddd xxx xx
6 eee xxx xxx

et ainsi de suite...
Quel est le code pour faire une macro qui irait identifier le premier code,
à partir de la ligne 2, et qui le recopierait dans chaque cellule vide de la
colonne A, jusqu'à ce qu'elle rencontre le second code, qu'elle recopierait
dans les cellules vides en dessous, jusqu'au 3ème... etc. Dans l'exemple,
elle recopierait 4100 jusqu'à la ligne 4 (ccc), puis ensuite 4215 jusqu'à la
ligne 6, etc.

Merci éperdument.
Soya.

ps : en prime, pour un sou de plus, j'aimerais bien aussi qu'elle identifie
les lignes vides (de b à zz) et qu'elle les supprime. Mais je la voudrais à
part. Quelle exigence !