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
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
A voir également:
- Aide concernant une macro Excel
- Liste déroulante excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Déplacer une colonne excel - Guide
- Formule excel - Guide
- Macro word - Guide
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
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
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
Bonjour
pour supprimer les colonnes une seule ligne
Range("C:C,F:O").Delete
&
Range("E1").Value = "Total"
A+
Maurice
pour supprimer les colonnes une seule ligne
Range("C:C,F:O").Delete
&
Range("E1").Value = "Total"
A+
Maurice
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
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
Michel
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
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
31 oct. 2013 à 11:16
Merci Michel cela va m'aider pour sélectionner des cellules sur une hauteur de champ
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.
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.
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
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
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
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
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
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
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.
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.
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
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
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
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
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
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
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
Modifié par michel_m le 1/11/2013 à 12:12
Proposition (honnête)
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
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
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
4 nov. 2013 à 14:06
Coucou! le weekend fut bon ?
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
5 nov. 2013 à 10:14
Excellent, je t'ai envoyé un message privé.