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

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

21 réponses
Avatar
e.l.f
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 !

10 réponses

1 2 3
Avatar
JpPradier
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
Avatar
Patrick Bastard
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" a écrit dans le message
de news:
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



Avatar
JpPradier
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
Avatar
Patrick Bastard
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,

Avatar
JpPradier
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
Avatar
Patrick Bastard
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
Avatar
JpPradier
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
Avatar
Patrick Bastard
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.
--
Bien cordialement,
==================================== P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse
Avatar
Misange
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*.

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.


Avatar
Patrick Bastard
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*.

Bon WE à toutes et tous.




1 2 3