Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

macro pour inserer une ligne vide a chaque changement de nom...

427 views
Skip to first unread message

e.l.f

unread,
Sep 1, 2004, 5:52:36 AM9/1/04
to
Bonjour

Voudriez vous bien m'aider a faire une macro SVP ? je ne suis absolument
pas developpeur et je seche un peu...

j'ai un classeur excel avec une colonne nom, une colonne prenom, une
colonne .... etc etc ...


je classe par nom j'ai donc

dupont marc
dupont jean
martin david
dubois jane
dubois valerie ....


qui pourrait me faire ou m'expliquer comment faire une macro qui insere
une ligne vide apres chaque changement de ligne ?

et une macro qui fasse l'inverse c'est a dire qui supprime les ligne vide


Merci pour votre aide !!!

e.l.f

--
R : Parce qu'on lit, en général, de gauche à droite et de haut en bas.
Q : Pourquoi dois-je répondre en dessous de la question ?

Fervent utilisateur de Thunderbird
A fond contre la quote de porc !

...Patrick

unread,
Sep 1, 2004, 7:36:29 AM9/1/04
to
Sub ins()
lastr = Range("A65000").End(xlUp).Row
For i = lastr To 2 Step -1
Cells(i, 1).Select
Selection.EntireRow.Insert Shift:=xlDown
Next
End Sub

Sub DetruireLignesVides() ' Commencer par le bas
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Application.ScreenUpdating = False
For r = DerniereLigne To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
ActiveSheet.UsedRange
End Sub


--
...Patrick
Quoi que vous fassiez, faites le bien .
Mail: http://cerbermail.com/?KPW0tTCjFw
Connectez vous sur ce forum par :
news://msnews.microsoft.com/microsoft.public.fr.excel


"e.l.f" <e....@cdg.44.fr> a écrit dans le message de
news:uI6xrlAk...@TK2MSFTNGP12.phx.gbl...

e.l.f

unread,
Sep 1, 2004, 7:57:00 AM9/1/04
to
...Patrick a écrit :

> Sub ins()
> lastr = Range("A65000").End(xlUp).Row
> For i = lastr To 2 Step -1
> Cells(i, 1).Select
> Selection.EntireRow.Insert Shift:=xlDown
> Next
> End Sub

Merci patrick pour tes macro !
celle qui supprime les ligne fonctionne admirablement..

par contre celle qui insere les ligne ne fonctionne pas comme je
l'aurais souhaité (je suis désolé)

il faut que

dupont marc
dupont jean
martin david
dubois jane
dubois valerie

devienne:

dupont marc
dupont jean

martin david

dubois jane
dubois valerie ....

un saut de ligne apres que le dernier nom commun... (le classeur est trié)

J'espere que tu peux continuer a m'aider !

A+

...Patrick

unread,
Sep 1, 2004, 8:04:06 AM9/1/04
to
plus le temps, sorry mais qq t'aideras ici surement

ciao

"e.l.f" <e....@cdg.44.fr> a écrit dans le message de

news:%23S8HNrB...@TK2MSFTNGP11.phx.gbl...

e.l.f

unread,
Sep 1, 2004, 8:13:32 AM9/1/04
to
...Patrick a écrit :

> plus le temps, sorry mais qq t'aideras ici surement
>
> ciao

c'est pas grave merci de ton aide !

JpPradier

unread,
Sep 1, 2004, 9:34:56 AM9/1/04
to
Bonjour e.l.f

J'ai modifié la macro de Patrick :

Sub ins()
lastr = Range("A65000").End(xlUp).Row

For i = lastr To 1 Step -1
nom1 = Left(Cells(i, 1).Value, InStr(Cells(i, 1).Value, " "))
nom2 = Left(Cells(i + 1, 1).Value, InStr(Cells(i + 1, 1).Value, " "))
If nom1 <> nom2 Then
Cells(i + 1, 1).Select
Selection.EntireRow.Insert Shift:=xlDown
End If
Next
End Sub

j-p

...Patrick

unread,
Sep 1, 2004, 12:05:34 PM9/1/04
to
Merci JP !!!


--
...Patrick (revenu)

Quoi que vous fassiez, faites le bien .
Mail: http://cerbermail.com/?KPW0tTCjFw
Connectez vous sur ce forum par :
news://msnews.microsoft.com/microsoft.public.fr.excel

"JpPradier" <jp.pradier.J...@wanadoo.fr> a écrit dans le message
de news:ODWYfiCk...@TK2MSFTNGP09.phx.gbl...

JpPradier

unread,
Sep 1, 2004, 12:32:00 PM9/1/04
to
Ben c'était avec plaisir ;-))

j-p

e.l.f

unread,
Sep 2, 2004, 11:19:04 AM9/2/04
to
JpPradier a écrit :

> Bonjour e.l.f
>
> J'ai modifié la macro de Patrick :
>

je suis desolé mais elle ne fonctionne pas :-(
et j'avoue ne pas trop comprendre pourquoi ?!

(rien ne se passe quand je l'execute ...)

Merci de continuer a m'aider !!

JpPradier

unread,
Sep 2, 2004, 1:12:44 PM9/2/04
to
Bonjour e.l.f

tes données sont bien en colonne A ?

j-p

e.l.f

unread,
Sep 3, 2004, 3:13:33 AM9/3/04
to
JpPradier a écrit :

> Bonjour e.l.f
>
> tes données sont bien en colonne A ?
>
> j-p
>
dans le classeur que j'utilise pour tester ta macro j'ai:

les noms en colonne a, les prenoms en colonne b. la ligne 1 contient les
en-tetes. dans le classeur final, il y aura les nom seront dans d'autres
colonnes mais je modifierais l'instruction lastr =
Range("A65000").End(xlUp).Row en fonction.

Merci de ton aide !

JpPradier

unread,
Sep 3, 2004, 3:33:12 AM9/3/04
to
Ah ! c'est pour ça que ca marche pas :-) J'avais compris que le nom et le prénom étaient dans la
meme cellule. Remplace dans la macro :

nom1= cells(i,1).value
nom2= cells(i+1).value

j-p

Patrick Bastard

unread,
Sep 3, 2004, 1:47:32 PM9/3/04
to
Bonsoir, JpPradier.

J'ai repris pour mon compte ce bout de code que tu as si obligeamment envoyé
à e.l.f.
Abuserais-je de ta bonne volonté en te demandant quelle ligne il faudrait y
ajouter pour que les sous totaux se fassent dans chaque ligne insérée (par
ex de la colonne b à la colonne d) (je suppose qu'en commençant par le bas,
les sous-totaux s'arrêteront à chaque ligne vierge, non ?)

Avec mes remerciements anticipés, car avec l'enregistreur, dans ce cas,
c'est galère...;-(


--
Bien cordialement,
=====================================
P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse


"JpPradier" <jp.pradier.J...@wanadoo.fr> a écrit dans le message
de news:ODWYfiCk...@TK2MSFTNGP09.phx.gbl...

JpPradier

unread,
Sep 3, 2004, 5:12:15 PM9/3/04
to
Bonsoir Patrick

Non, tu n'abuses pas ;-) Mais il faudrait que tu expliques un peu plus. Si je comprends bien, tu
veux un sous-total pour chaque nom, alors deux questions :

- Le sous-total compte juste les chiffres pour un nom ou pour tous les noms au dessus.
- On le met ou ce sous-total ? Dans la ligne vide ?

j-p

Patrick Bastard

unread,
Sep 3, 2004, 5:50:04 PM9/3/04
to
Bonsoir, J-P

Merci d'avoir répondu.


>
> Non, tu n'abuses pas ;-) Mais il faudrait que tu expliques un peu plus. Si
je comprends bien, tu
> veux un sous-total pour chaque nom, alors deux questions :
>
> - Le sous-total compte juste les chiffres pour un nom ou pour tous les
noms au dessus.

Un sous-total pour chaque nom, comprenant un nombre non régulier de
sous-codes


> - On le met ou ce sous-total ? Dans la ligne vide ?

Oui, dans la ligne vide que ton code insère.

En fait, il s'agit de remanier un tableau (résultat d'un TCD copie/collage
spécial) avec :
un code en colonne A
un sous code en colonne B
des chiffres dans les colonnes suivantes ,

pour obtenir à chaque modification du code de la colonne A une ligne
supplémentaire avec le total des colonnes correspondant à l'ensemble des
sous-codes :

soit autant de lignes insérées, et donc autant de sous-totaux que de codes
différents.

J'espère avoir été assez clair, sinon, bien entendu, je reste à ta
disposition pour plus de renseignements (c'est bien la moindre des
choses...)

Bien cordialement,


JpPradier

unread,
Sep 3, 2004, 6:49:53 PM9/3/04
to
Ci-dessous un exemple avec sous-totaux dans la colonne C.

j-p

Sub ins()
deb = 0
fin = 0


lastr = Range("A65000").End(xlUp).Row
For i = lastr To 1 Step -1

nom1 = Cells(i, 1).Value
nom2 = Cells(i + 1, 1).Value
If nom1 <> nom2 Then
If fin <> 0 Then
deb = i + 1


Cells(i + 1, 1).Select
Selection.EntireRow.Insert Shift:=xlDown

Cells(fin + 1, 3).Formula = "=sum(C" & deb + 1 & ":C" & fin & ")"
fin = i + 1
Else
fin = i + 1
End If
End If
Next
Cells(fin, 3).Formula = "=sum(C1:C" & fin - 1 & ")"
End Sub

Patrick Bastard

unread,
Sep 4, 2004, 4:38:48 AM9/4/04
to
Bonjour, *JpPradier*.

Ton code fonctionne parfaitement, et je te remercie. Que de temps gagné...
Je joins ci-dessous les modif que j'ai effectuées -avec beaucoup de mal, car
je débute en VBA-

Quelques détails restent en suspens :

*Changement de format de la ligne Total*
Comment ne changer le format que d'une partie de la ligne (par ex de A à Q
ou alors sur une sélection faite à la souris)
Pourquoi la dernière ligne n'est-elle pas changée, et comment la changer
sans rajouter une ligne de code?

*Ajouter les totaux*
Est-il possible de simplifier le code pour ajouter les totaux dans une série
de colonnes (Ici de L à Q) sans faire une ligne de code pour chaque colonne?

Encore merci, et bon week end aux Toulonnais et aux autres.


'JPPradier le 3/09/2004 insérer une ligne à chaque changement de valeur de
la col A -
'Le tableau doit commencer en ligne 1

Sub ins()
deb = 0
fin = 0
lastr = Range("A65000").End(xlUp).Row
For i = lastr To 1 Step -1
nom1 = Cells(i, 1).Value
nom2 = Cells(i + 1, 1).Value
If nom1 <> nom2 Then
If fin <> 0 Then
deb = i + 1
Cells(i + 1, 1).Select
Selection.EntireRow.Insert Shift:=xlDown

'======================================
'Modifier la couleur de la ligne Total
Selection.EntireRow.Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 3
Selection.Font.Bold = True
'=======================================
'Ajouter les totaux
Cells(fin + 1, 1).Formula = "TOTAL"
Cells(fin + 1, 12).Formula = "=sum(L" & deb + 1 & ":L" & fin &
")"
Cells(fin + 1, 13).Formula = "=sum(M" & deb + 1 & ":M" & fin &
")"
Cells(fin + 1, 14).Formula = "=sum(N" & deb + 1 & ":N" & fin &
")"
Cells(fin + 1, 15).Formula = "=sum(O" & deb + 1 & ":O" & fin &
")"
Cells(fin + 1, 16).Formula = "=sum(P" & deb + 1 & ":P" & fin &
")"
Cells(fin + 1, 17).Formula = "=sum(Q" & deb + 1 & ":Q" & fin &


")"
fin = i + 1
Else
fin = i + 1
End If
End If
Next

Cells(fin, 1).Formula = "TOTAL"
Cells(fin, 12).Formula = "=sum(L1:L" & fin - 1 & ")"
Cells(fin, 13).Formula = "=sum(M1:M" & fin - 1 & ")"
Cells(fin, 14).Formula = "=sum(N1:N" & fin - 1 & ")"
Cells(fin, 15).Formula = "=sum(O1:O" & fin - 1 & ")"
Cells(fin, 16).Formula = "=sum(P1:P" & fin - 1 & ")"
Cells(fin, 17).Formula = "=sum(Q1:Q" & fin - 1 & ")"

End Sub


JpPradier

unread,
Sep 4, 2004, 5:20:36 AM9/4/04
to
Bonjour Patrick

J'ai modifiée la macro selon ta demande (si j'ai bien compris) :
Bon week-end aussi.
j-p


'JPPradier le 3/09/2004 insérer une ligne à chaque changement de valeur de
la col A -
'Le tableau doit commencer en ligne 1

Sub ins()
deb = 0
fin = 0
lastr = Range("A65000").End(xlUp).Row
For i = lastr To 1 Step -1
nom1 = Cells(i, 1).Value
nom2 = Cells(i + 1, 1).Value
If nom1 <> nom2 Then
If fin <> 0 Then
deb = i + 1
Cells(i + 1, 1).Select
Selection.EntireRow.Insert Shift:=xlDown

'======================================
'Modifier la couleur de la ligne Total

With Range("a" & fin + 1 & ":q" & fin + 1)
.Interior.ColorIndex = 6
.Interior.Pattern = xlSolid
.Font.ColorIndex = 3
.Font.Bold = True
End With


'=======================================
'Ajouter les totaux
Cells(fin + 1, 1).Formula = "TOTAL"

Range("L" & fin + 1 & ":Q" & fin + 1).Formula = "=sum(L" & deb + 1 & ":L" & fin & ")"


fin = i + 1
Else
fin = i + 1
End If
End If
Next
Cells(fin, 1).Formula = "TOTAL"

Range("L" & fin & ":Q" & fin).Formula = "=sum(L1:L" & fin - 1 & ")"
With Range("a" & fin & ":q" & fin)
.Interior.ColorIndex = 6
.Interior.Pattern = xlSolid
.Font.ColorIndex = 3
.Font.Bold = True
End With
End Sub

Patrick Bastard

unread,
Sep 4, 2004, 7:58:13 AM9/4/04
to
Merci, *Jean P(ierre, aul, hilippe) Pradier*.

C'est pilpoil ce que je désirais.
Chapeau bas, messieurs...

Il ne me reste plus qu'à "décortiquer "pour comprendre.


Bon WE à toutes et tous.

Misange

unread,
Sep 4, 2004, 10:39:29 AM9/4/04
to
et raté ! c'est Jean pascal ! :-)
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

on 04/09/2004 13:58:

Patrick Bastard

unread,
Sep 4, 2004, 10:51:12 AM9/4/04
to
Bonjour, Flo. J'en prends bonne note.

Le monsieur essuie son nez, mouche sa bouche, et dit :

*Merci, Jean-Pascal*.

:-)


> et raté ! c'est Jean pascal ! :-)
> Misange migrateuse http://www.excelabo.net
> mail : http://cerbermail.com/?k5Q8Dh2mta
>
> on 04/09/2004 13:58:
>> Merci, *Jean P(ierre, aul, hilippe) Pradier*.
>>

JpPradier

unread,
Sep 4, 2004, 11:08:50 AM9/4/04
to
Il vous en prie ;-)))

j-p

0 new messages