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 !
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...
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+
ciao
"e.l.f" <e....@cdg.44.fr> a écrit dans le message de
news:%23S8HNrB...@TK2MSFTNGP11.phx.gbl...
> plus le temps, sorry mais qq t'aideras ici surement
>
> ciao
c'est pas grave merci de ton aide !
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 (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...
j-p
> 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 !!
tes données sont bien en colonne A ?
j-p
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 !
nom1= cells(i,1).value
nom2= cells(i+1).value
j-p
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...
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
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,
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
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
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
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.
on 04/09/2004 13:58:
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*.
>>
j-p