A voir également:
- Effectuer des contrôles
- Comment effectuer un paiement en ligne avec une carte visa - Guide
- Steam doit être en ligne pour effectuer la mise à jour - Forum Jeux PC
- Impossible d’effectuer l’opération car vous ne disposez pas des autorisations requises. ✓ - Forum MacOS
- Impossible de démarrer Steam ✓ - Forum Jeux PC
- Impossible d’effectuer plus de demandes pour le moment. ✓ - Forum Facebook
2 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
25 févr. 2011 à 11:56
25 févr. 2011 à 11:56
Bonjour
RgT est bizarre...
rgt est dékarée en Range
Et là
RgT = Cells(6, C).Value si tu demande la valeur Rgt n'est plus une "range" ==> incompatibilité de type
mais ta macro parait bien compliqué...
RgT est bizarre...
rgt est dékarée en Range
Et là
RgT = Cells(6, C).Value si tu demande la valeur Rgt n'est plus une "range" ==> incompatibilité de type
mais ta macro parait bien compliqué...
Les bureaux sont bien vides en ce vendredi matin. Je fais un tour sur les forums et je me rends compte que j'ai publié des posts que je ne suis plus allé voir par la suite.
Je suis bien arrivé à finaliser cette macro. A partir d'une base de données cette macro va créer un onglet spécifique à chaque colonne. Chaque ligne dont une valeur est à 0 est supprimée. J'ai apporté une nouvelle modification: un tableau croisé dynamique est crée pour chacun de ces onglets. Voici le code ca peut aider quelqu'un.
Voici ma maquette. Il suffit de cliquer sur le premier bouton contrôle.
http://www.cijoint.fr/cjlink.php?file=cj201104/cijFFxD0Yd.xls
Private Sub CommandButton1_Click()
Dim RgT As String, N As Long, C As Long, FeuiR As Worksheet
Dim Adr As String 'Source
Dim Adr1 As String 'Destination
Dim PT As PivotTable
For C = 15 To 256
RgT = Cells(6, C).Value
If RgT = "" Then
Exit For
End If
Set FeuiR = Worksheets.Add
FeuiR.Name = RgT
Feuil1.Columns(1).Resize(, 14).Copy FeuiR.Columns(1)
Feuil1.Columns(C).Copy FeuiR.Columns(15)
Set FeuiR = Worksheets.Add
FeuiR.Name = RgT & "TCD"
'suppression des lignes avec quantités a zero
Sheets(RgT).Select
Sheets(RgT).Activate
'With Worksheets(RgT)
Dim dl As Integer 'déclare la variable dl
Dim x As Integer 'déclare la variable x
dl = Range("I65536").End(xlUp).Row 'définit la variable x (dernière ligne remplie (colonne à adapter))
For x = dl To 8 Step -1
'si la cellule de la ligne x, colonne 15 ("I") est nulle, supprime la ligne
If Sheets(RgT).Cells(x, 15).Value = 0 Then
Sheets(RgT).Rows(x).Delete
End If
Next x 'prochaine ligne de la boucle
'End With
' Tableaucroisédynamique Macro
Name = "Tcd " & C
Dest = RgT & "!A3"
Sheets(RgT).Select
'Définir où sera copié le pivottable
With Worksheets(RgT)
Adr1 = .Name & "TCD!" & .Range("A3").Address
End With
'Définir où sont les données pour le pivotcache
With Worksheets(RgT)
Adr = .Name & "!" & .Range("F7:O" & _
.Range("O65536").End(xlUp).Row).Address
'Adr = .Name & "!" & .Range("F7:O" & .Range("O65536").End(xlUp).Row).Address
'...
'..., SourceData:=Range(Adr))
'Écrivez plutôt :
'Code VBA:
'Set MaPlageSource = .Range("F7:O" & .Range("O65536").End(xlUp).Row)
'...
'..., SourceData:=MaPlageSource)
End With
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
Adr).CreatePivotTable TableDestination:= _
"'" & RgT & "TCD'!R3C1", TableName:= _
RgT, DefaultVersion:=xlPivotTableVersion10
Sheets(RgT & "TCD").Select
ActiveSheet.PivotTables(RgT).AddFields RowFields:= _
Array("Période", "Date Livraison", "RCT")
ActiveSheet.PivotTables(RgT).PivotFields("Impl."). _
Orientation = xlDataField
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveSheet.PivotTables(RgT).PivotFields("RCT"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables(RgT).PivotFields("Période"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables(RgT).PivotFields( _
"Date Livraison").Subtotals = Array(False, False, False, False, False, False, False, _
False, False, False, False, False)
ActiveSheet.PivotTables(RgT).AddFields RowFields:= _
Array("Période", "Date Livraison", "RCT")
ActiveWorkbook.ShowPivotTableFieldList = False
Next C
End Sub
Je suis bien arrivé à finaliser cette macro. A partir d'une base de données cette macro va créer un onglet spécifique à chaque colonne. Chaque ligne dont une valeur est à 0 est supprimée. J'ai apporté une nouvelle modification: un tableau croisé dynamique est crée pour chacun de ces onglets. Voici le code ca peut aider quelqu'un.
Voici ma maquette. Il suffit de cliquer sur le premier bouton contrôle.
http://www.cijoint.fr/cjlink.php?file=cj201104/cijFFxD0Yd.xls
Private Sub CommandButton1_Click()
Dim RgT As String, N As Long, C As Long, FeuiR As Worksheet
Dim Adr As String 'Source
Dim Adr1 As String 'Destination
Dim PT As PivotTable
For C = 15 To 256
RgT = Cells(6, C).Value
If RgT = "" Then
Exit For
End If
Set FeuiR = Worksheets.Add
FeuiR.Name = RgT
Feuil1.Columns(1).Resize(, 14).Copy FeuiR.Columns(1)
Feuil1.Columns(C).Copy FeuiR.Columns(15)
Set FeuiR = Worksheets.Add
FeuiR.Name = RgT & "TCD"
'suppression des lignes avec quantités a zero
Sheets(RgT).Select
Sheets(RgT).Activate
'With Worksheets(RgT)
Dim dl As Integer 'déclare la variable dl
Dim x As Integer 'déclare la variable x
dl = Range("I65536").End(xlUp).Row 'définit la variable x (dernière ligne remplie (colonne à adapter))
For x = dl To 8 Step -1
'si la cellule de la ligne x, colonne 15 ("I") est nulle, supprime la ligne
If Sheets(RgT).Cells(x, 15).Value = 0 Then
Sheets(RgT).Rows(x).Delete
End If
Next x 'prochaine ligne de la boucle
'End With
' Tableaucroisédynamique Macro
Name = "Tcd " & C
Dest = RgT & "!A3"
Sheets(RgT).Select
'Définir où sera copié le pivottable
With Worksheets(RgT)
Adr1 = .Name & "TCD!" & .Range("A3").Address
End With
'Définir où sont les données pour le pivotcache
With Worksheets(RgT)
Adr = .Name & "!" & .Range("F7:O" & _
.Range("O65536").End(xlUp).Row).Address
'Adr = .Name & "!" & .Range("F7:O" & .Range("O65536").End(xlUp).Row).Address
'...
'..., SourceData:=Range(Adr))
'Écrivez plutôt :
'Code VBA:
'Set MaPlageSource = .Range("F7:O" & .Range("O65536").End(xlUp).Row)
'...
'..., SourceData:=MaPlageSource)
End With
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
Adr).CreatePivotTable TableDestination:= _
"'" & RgT & "TCD'!R3C1", TableName:= _
RgT, DefaultVersion:=xlPivotTableVersion10
Sheets(RgT & "TCD").Select
ActiveSheet.PivotTables(RgT).AddFields RowFields:= _
Array("Période", "Date Livraison", "RCT")
ActiveSheet.PivotTables(RgT).PivotFields("Impl."). _
Orientation = xlDataField
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveSheet.PivotTables(RgT).PivotFields("RCT"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables(RgT).PivotFields("Période"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables(RgT).PivotFields( _
"Date Livraison").Subtotals = Array(False, False, False, False, False, False, False, _
False, False, False, False, False)
ActiveSheet.PivotTables(RgT).AddFields RowFields:= _
Array("Période", "Date Livraison", "RCT")
ActiveWorkbook.ShowPivotTableFieldList = False
Next C
End Sub
25 févr. 2011 à 13:42
Quand tu dis que ma macro est compliquée tu entends par là qu'elle peut être simplifiée?
25 févr. 2011 à 13:56
rgt_nom=cells(6,C)
Set FeuiR = Worksheets.Add
FeuiR.Name = RgT_nom
Quand tu dis que ma macro est compliquée tu entends par là qu'elle peut être simplifiée?
oui, mais il faudrait voir ta feuille