Aide concernant une macro Excel

Résolu/Fermé
Nico - 30 oct. 2013 à 17:30
NicoKaraR Messages postés 17 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 15 janvier 2014 - 5 nov. 2013 à 10:14
Bonsoir,


Je suis à la recherche d'un peu d'aide concernant une macro Excel.
Je ne suis pas connaisseur, j'ai un peu fouillé sur Internet et trouvé une partie de la réponse à ma question.

J'ai un document qui sera composé de 15 colonnes et d'un nombre i de lignes.
J'aimerais automatiser le "nettoyage" de ce document qui est amené à être renouvelé régulièrement et être utilisé pour du publipostage.


Je voudrais supprimer la colonne C et les colonnes F à O.
Si ne je m'abuse, la macro pour faire ça est la suivante :

Range("F:O").Delete Shift:=xlToLeft
Columns("C:C").Delete Shift:=xlToLeft

Y a-t-il des choses à changer ou frôle-t-elle la perfection ?!

Ensuite, c'est là où je bloque. Je me retrouve avec 4 colonnes. J'aimerais ajouter une formule dans la colonne E où je divise la colonne C par la colonne D, de la ligne 2 à la ligne i.
Et y ajouter un titre "total" dans la cellule E1.

Pourriez-vous me guider svp ?!

Ce document est amener à être partagé sur le réseau local de l'entreprise.


Merci d'avance,
Nico.


A voir également:

8 réponses

PHILOU10120 Messages postés 6371 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 5 mai 2024 797
30 oct. 2013 à 19:48
Bonjour

Cela pourrait ressembler à ça pour 100 lignes et avec le titre Total centré V et H

Sub effacer()
'
' effacer Macro
'

'
Range("F:O").Delete Shift:=xlToLeft
Columns("C:C").Delete Shift:=xlToLeft
Range("E2").Select
ActiveCell.FormulaR1C1 = "=IF(ISERROR(RC[-2]/RC[-1]),"""",RC[-2]/RC[-1])"
Range("E2").Select
Selection.AutoFill Destination:=Range("E2:E100"), Type:=xlFillDefault
Range("E2:E100").Select
Range("E1").Select
ActiveCell.FormulaR1C1 = "Total"
Range("E1").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("E2").Select
End Sub
1
Bonjour

pour supprimer les colonnes une seule ligne

Range("C:C,F:O").Delete

&

Range("E1").Value = "Total"

A+
Maurice
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 31/10/2013 à 10:56
Bonjour,

excusez l'icruste mais

Procédure demande initiale peut -^tre sans lignes inutiles et nombre de lignes variable; pour la 2° je regarde si j'ai un peu de temps car + complexe

Option Explicit
Sub amenager()
Dim derlig As Integer
'initialisations
Application.ScreenUpdating = False 'fige le défilement de l'écran
Range("C:C,F:O").Delete ' détruit les colonnes C et F à O
derlig = Columns("A").Find("*", , , , , xlPrevious).Row 'dernière ligne du tableau
'Travail sur colonne E
With Range("E1") 'titre "Total"centré
.Value = "Total"
.HorizontalAlignment = xlCenter
End With
With Range("E2") ' formule recopiée
.FormulaLocal = "=si(D2>0;C2/D2;"""")"
.AutoFill Destination:=Range("E2:E" & derlig)
End With
End Sub

Michel
1
PHILOU10120 Messages postés 6371 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 5 mai 2024 797
31 oct. 2013 à 11:16
Merci Michel cela va m'aider pour sélectionner des cellules sur une hauteur de champ
0
Merci Maurice et Philou pour votre aide.

Philou, ta formule fonctionne parfaitement.
Tu pourrais m'expliquer le pourquoi de ton deuxième With stp ?

J'ai une autre requête que j'ai oublié de préciser dans mon message initial.
J'aimerais dupliquer, toujours avec la même macro, mes lignes en fonction de la valeur de la colonne D.

Par exemple, j'ai la valeur 4 en D2, la valeur 2 en D3 et la valeur 6 en D4, j'aimerais dupliquer ma ligne 2 trois fois (pour avoir un total de 4 lignes identiques), ma ligne 3 une fois (pour avoir un total de 2 lignes), ma ligne 4 cinq fois (pour avoir un total de 6 lignes). L'idéal en insérant les lignes copiées juste en-dessous la ligne concernée.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PHILOU10120 Messages postés 6371 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 5 mai 2024 797
31 oct. 2013 à 10:32
Bonjour Nico et Maurice

La première macro modifié avec les infos de Maurice et la correction sur le centrage de Total

Sub effacer()
'
' effacer Macro
'

'
Range("C:C,F:O").Delete
Range("E1").Value = "Total"
Range("E2").Select
ActiveCell.FormulaR1C1 = "=IF(ISERROR(RC[-2]/RC[-1]),"""",RC[-2]/RC[-1])"
Range("E2").Select
Selection.AutoFill Destination:=Range("E2:E100"), Type:=xlFillDefault
Range("E2:E100").Select
Range("E1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("E2").Select
End Sub


Pour la nouvelle question. Je ne sais pas faire
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 31/10/2013 à 11:35
Nico,

Pour te proposer une solution efficace (espèrons le) pour ta 2° demande

On travaille sur 5 colonnes (A à E) ?

Combien de lignes environ ?

Suis absent cet aprèm: je regarderai certainement demain

Michel
0
Merci Michel.
Au maximum, 25 lignes et oui, je travaille bien avec 5 colonnes après la suppression.
Pour faciliter la chose, peut-être pourrait-on dupliquer ces lignes dans une deuxième feuille au lieu de les insérer les unes après les autres.
0
NicoKaraR Messages postés 17 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 15 janvier 2014
31 oct. 2013 à 17:06
Et du coup, si la solution dont je viens de parler est plus facile, j'ai fait ça :

Range("F1").Value = "1"

With Range("F2")
.FormulaLocal = "=F1+D2"
.AutoFill Destination:=Range("F2:F" & derlig)
End With

With Range("G2")
.FormulaLocal = "=F1+1"
.AutoFill Destination:=Range("G2:G" & derlig)
End With


Ça me rajoute deux colonnes F et G qui représentent une ligne de début et une ligne de fin.

Par exemple :
A2=10 donc F2=2 et G2=11
=> (il faut dupliquer la ligne 2 de la feuille 1, de la ligne 2 à la ligne 11 de la feuille 2)
A3=15 donc F3=12 et G3=26
=> (il faut dupliquer la ligne 3 de la feuille 1, de la ligne 12 à la ligne 26 de la feuille 2)


On aurait une logique comme ça :

X=2
De X à derlig
Copier ligne(X)
Coller de feuille2.ligne(FX) à feuille2.ligne(GX)
X+1
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 1/11/2013 à 08:22
Bonjour,
Tu écris:
j'aimerais dupliquer, toujours avec la même macro, mes lignes en fonction de la valeur de la colonne D.
puis
Par exemple :
A2=10 donc F2=2 et G2=11


Qu'est ce que je fais : D ou A ?

Mais on a pas besoin d'ajouter 2 colonnes :o)

j'attends ta réponse
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 1/11/2013 à 12:12
Proposition (honnête)


Option explicit
'-------------------------------
Sub amenager()
Dim Derlig As Integer, Copies(), Lig As Byte, Nbre As Byte
Dim Ligvide As Integer

'initialisations
Application.ScreenUpdating = False 'fige le défilement de l'écran
Sheets(2).Range("A1:E1000").Clear 'nettoie l'ancien tableau aménagé
'----
With Sheets(1)
. Range("C:C,F:O").Delete ' détruit les colonnes C et F à O
'----
Copies = .Range("A1:D1").Value 'mémorisation des titres de champ en feuille 1
With Sheets(2)
.Range("A1:D1") = Copies
With .Range("E1") ' inscription du champ "total "centré
.Value = "Total"
.HorizontalAlignment = xlCenter
End With
End With
'-----
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row 'dernière ligne du tableau
For Lig = 2 To Derlig
Copies = .Range(.Cells(Lig, "A"), .Cells(Lig, "D")).Value ''mémorisation des valeurs de champ en feuille 1
Nbre = .Cells(Lig, "A") 'nombre de lignes à recopier
If Nbre > 0 Then
With Sheets(2) 'inscription des données n fois suivant nombre(nbre) indiqué colonne A feuille1
Ligvide = .Columns("A").Find("", .Range("A1")).Row '' prem. ligne vide
.Cells(Ligvide, "A").Resize(Nbre, 4) = Copies
End With
End If
Next
End With
'----
'inscription et recopie de la formule colonne E
With Sheets(2)
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
With .Range("E2") ' formule recopiée
.FormulaLocal = "=si(D2>0;C2/D2;"""")"
.AutoFill Destination:=Sheets(2).Range("E2:E" & Derlig)
End With
'encadrement du tableau
.Range("A1:E" & Derlig).Borders.Weight = xlThin
.Select
End With
End Sub

Maquette avec macro "try" pour essais après un 1° essai: réinsère colonne C et donne des nombres aléatoires entre 1 et 9 colonne A
https://www.cjoint.com/?3KbmbU5HLYH
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
4 nov. 2013 à 14:06
Coucou! le weekend fut bon ?
0
NicoKaraR Messages postés 17 Date d'inscription jeudi 31 octobre 2013 Statut Membre Dernière intervention 15 janvier 2014
5 nov. 2013 à 10:14
Excellent, je t'ai envoyé un message privé.
0