Macro demande selection de plage de donne- vb
Résolu/Fermé
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
-
27 oct. 2009 à 14:06
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 - 5 nov. 2009 à 16:30
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 - 5 nov. 2009 à 16:30
A voir également:
- Macro demande selection de plage de donne- vb
- Vb - Télécharger - Langages
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Vb cable - Télécharger - Audio & Musique
- Macro word - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
25 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
27 oct. 2009 à 14:53
27 oct. 2009 à 14:53
Salut,
Voici des codes pour la sélection de plages de données avec VBA Excel :
Sources : https://apprendreexcel.com/
Sub SelectionPlageAvecSouris()
Dim Plage As Range
Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
MsgBox ("La plage que vous avez séléctionnez est : " & Plage.Address)
End Sub
Sub SelectionDiscontinue()
Dim Z1, Z2, MaPlageMultiZone As Range
Worksheets("Feuil1").Select
Range("A1").Select
ActiveCell.End(xlDown).Select
Zone1 = ActiveCell.Address
Selection.Offset(0, 2).Select
Zone2 = ActiveCell.Address
Set Z1 = Range("A1", Zone1)
Set Z2 = Range("C1", Zone2)
Set MaPlageMultiZone = Union(Z1, Z2)
ZoneSelection = MaPlageMultiZone.Select
End Sub
Sub SelectionDeuxColonnesNonContigues()
' Soit les colonnes A (1) et D (4) à sélectionner
NCol1 = 1
NCol2 = 4
Union(Cells(1, NCol1), Cells(1, NCol2)).EntireColumn.Select
End Sub
Je pense que là tu disposes de tous les outils pour terminer ta macro.
Bon courage
Voici des codes pour la sélection de plages de données avec VBA Excel :
Sources : https://apprendreexcel.com/
Sub SelectionPlageAvecSouris()
Dim Plage As Range
Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
MsgBox ("La plage que vous avez séléctionnez est : " & Plage.Address)
End Sub
Sub SelectionDiscontinue()
Dim Z1, Z2, MaPlageMultiZone As Range
Worksheets("Feuil1").Select
Range("A1").Select
ActiveCell.End(xlDown).Select
Zone1 = ActiveCell.Address
Selection.Offset(0, 2).Select
Zone2 = ActiveCell.Address
Set Z1 = Range("A1", Zone1)
Set Z2 = Range("C1", Zone2)
Set MaPlageMultiZone = Union(Z1, Z2)
ZoneSelection = MaPlageMultiZone.Select
End Sub
Sub SelectionDeuxColonnesNonContigues()
' Soit les colonnes A (1) et D (4) à sélectionner
NCol1 = 1
NCol2 = 4
Union(Cells(1, NCol1), Cells(1, NCol2)).EntireColumn.Select
End Sub
Je pense que là tu disposes de tous les outils pour terminer ta macro.
Bon courage
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
27 oct. 2009 à 15:23
27 oct. 2009 à 15:23
merciiiiii
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
27 oct. 2009 à 16:16
27 oct. 2009 à 16:16
je reviens vers vous parce que j ai un probleme
alors pour le moment j en suis la (je mettrai une meilleur explication dans les box apres)
je ne met pas end sub car mon prob est juste apres
Sub essai()
Dim Plage As Range
Dim Range1
Dim Range2
Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
MsgBox ("La plage que vous avez séléctionnez est : " & Plage.Address)
Plage.Clear
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
MsgBox ("La plage que vous avez séléctionnez est : " & Plage.Address)
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
MsgBox ("La plage que vous avez séléctionnez est : " & Plage.Address)
Range1 = Range2
End Sub
et je n arrive pas a adapter ces deux ligne
With Range("K2")
.FormulaR1C1 = "=RC[-5]"
une idee ?
ps : au debut je pensais mettre les trois codes en debut de macro et les appeler au besoin mais je ne sais pas faire
alors pour le moment j en suis la (je mettrai une meilleur explication dans les box apres)
je ne met pas end sub car mon prob est juste apres
Sub essai()
Dim Plage As Range
Dim Range1
Dim Range2
Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
MsgBox ("La plage que vous avez séléctionnez est : " & Plage.Address)
Plage.Clear
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
MsgBox ("La plage que vous avez séléctionnez est : " & Plage.Address)
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
MsgBox ("La plage que vous avez séléctionnez est : " & Plage.Address)
Range1 = Range2
End Sub
et je n arrive pas a adapter ces deux ligne
With Range("K2")
.FormulaR1C1 = "=RC[-5]"
une idee ?
ps : au debut je pensais mettre les trois codes en debut de macro et les appeler au besoin mais je ne sais pas faire
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
27 oct. 2009 à 16:32
27 oct. 2009 à 16:32
Je ne comprends rien de rien à ta question... Que vient faire ici :
With Range("K2")
.FormulaR1C1 = "=RC[-5]"
End With
Ce bout de code dit simplement que dans K2 il doit inscrire la formule =F2........
Pas de rapport avec la choucoute!!
With Range("K2")
.FormulaR1C1 = "=RC[-5]"
End With
Ce bout de code dit simplement que dans K2 il doit inscrire la formule =F2........
Pas de rapport avec la choucoute!!
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
27 oct. 2009 à 16:38
27 oct. 2009 à 16:38
j'ai deux question
tout d'abord à quoi sert de faire deux inputbox si ensuite tu dit range 1=range 2 ??
ensuite , peut etre qu'il faut un end with après un with (ainsi qu'un décalage )
with range("K2")
.formulaR1C1 = "=RC[-5]
end with
tout d'abord à quoi sert de faire deux inputbox si ensuite tu dit range 1=range 2 ??
ensuite , peut etre qu'il faut un end with après un with (ainsi qu'un décalage )
with range("K2")
.formulaR1C1 = "=RC[-5]
end with
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
27 oct. 2009 à 16:59
27 oct. 2009 à 16:59
le but et de creer un tableau dynamique, moi je sais changer les parametre de la macro via l editeur mais pour mes collegues ... du coup j essaye
ben parce que en range1 il y a un titre normalement vu qu il s agit de liste par exemple prix et en range2 il copie juste ke titre..... c est vrai que je peux faire plus simple tien
le probleme est la
With Range("K2")
.FormulaR1C1 = "=RC[-5]"
.AutoFill Destination:=Range("K2:K5829")
End With
ps: j essaye d adapter ma macro du premier message
ben parce que en range1 il y a un titre normalement vu qu il s agit de liste par exemple prix et en range2 il copie juste ke titre..... c est vrai que je peux faire plus simple tien
le probleme est la
With Range("K2")
.FormulaR1C1 = "=RC[-5]"
.AutoFill Destination:=Range("K2:K5829")
End With
ps: j essaye d adapter ma macro du premier message
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
27 oct. 2009 à 18:15
27 oct. 2009 à 18:15
j'ai copier la fonction
With Range("K2")
.FormulasR1C1 = "=Range("K2:K5829")
.AutoFill Destination:=Range("K2:K5829")
End With
et cela fonctionne parfaitement dans les cases K2 à K5829 il copie la valeur des cases F2 à F5829
With Range("K2")
.FormulasR1C1 = "=Range("K2:K5829")
.AutoFill Destination:=Range("K2:K5829")
End With
et cela fonctionne parfaitement dans les cases K2 à K5829 il copie la valeur des cases F2 à F5829
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
27 oct. 2009 à 18:50
27 oct. 2009 à 18:50
oui moi aussi mais le but c est de demande a l utilisateur de choisir vu que aucun tableau n a les mm proportion, etiquette etc
la macro en elle mm fonctione pafaitement bien mais pour le tableau que j ai joint en exemple
la macro en elle mm fonctione pafaitement bien mais pour le tableau que j ai joint en exemple
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
28 oct. 2009 à 08:35
28 oct. 2009 à 08:35
Salut,
Sans te mentir, j'ai eu une lueur d'inspiration en me lavant les dents ce matin... Tu vois je pense à toi!!
En fait, tu copies dans la colonne K les données qui vont te servir à composer ton TCD? Donc tu voudrais que l'utilisateur choisisse une colonne ("I" par exemple) et que en K on y retrouve : en K1 le titre et en dessous de K2 à K40000 les valeurs contenues dans la colonne choisie par l'utilisateur. Est ce bien cela ou faut il que je retourne me laver les dents?
Sans te mentir, j'ai eu une lueur d'inspiration en me lavant les dents ce matin... Tu vois je pense à toi!!
En fait, tu copies dans la colonne K les données qui vont te servir à composer ton TCD? Donc tu voudrais que l'utilisateur choisisse une colonne ("I" par exemple) et que en K on y retrouve : en K1 le titre et en dessous de K2 à K40000 les valeurs contenues dans la colonne choisie par l'utilisateur. Est ce bien cela ou faut il que je retourne me laver les dents?
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
28 oct. 2009 à 10:52
28 oct. 2009 à 10:52
lol en te brossant les dents... je commence a avoir un peu peur la
c est presque ca, en fait je veux aussi choisir la clolone ous ont copie les connees qui vont servir a composerr le tableau vu que la colone k peut etre utiliste par un tableau de donnee....du coup ici k = range1,
tu peux arreter de te laver les dents et commencer la fil dentaire....
c est presque ca, en fait je veux aussi choisir la clolone ous ont copie les connees qui vont servir a composerr le tableau vu que la colone k peut etre utiliste par un tableau de donnee....du coup ici k = range1,
tu peux arreter de te laver les dents et commencer la fil dentaire....
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
28 oct. 2009 à 11:04
28 oct. 2009 à 11:04
la colonne ou sont copiées les données qui vont servir a composer le tableau : Tu veux dire par là la première colonne vide à droite de ta base de données?
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
28 oct. 2009 à 11:08
28 oct. 2009 à 11:08
me suis mal exprime pardon "c'est presque ca, en fait je veux aussi faire choisir la colone ou sont copie les donnees qui vont servir a composer le TDC vu que la colone k peut etre utiliste"
mais oui c'est ca, car "il faut que les colonnes-sources du TCD soient jointives (on peut faire autrement mais...) " (cf michel_m)
dsl pour les accents et autres, clavier qwerty, je suis en ecosse la lol
mais oui c'est ca, car "il faut que les colonnes-sources du TCD soient jointives (on peut faire autrement mais...) " (cf michel_m)
dsl pour les accents et autres, clavier qwerty, je suis en ecosse la lol
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
28 oct. 2009 à 11:58
28 oct. 2009 à 11:58
Bon voici un petit code construit avec l'aide de https://apprendreexcel.com/
Il permet de sélectionner les colonnes sources et destinations (F et K dans ton exemple)
Sub essai()
Dim Num_col As Integer, Num_col2 As Integer, diff As Integer
'déclare les variables correspondantes au numéros des colonnes que l'on sélectionne
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
Num_col = Range1.Column
'on stocke ici le numéro de la colonne sélectionnée
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
Num_col2 = Range2.Column
diff = -(Num_col2 - Num_col) 'ici on fait la différence des numéros de colonne pour inscrire ce résultat dans la formule plus bas Formula RC "diff"
Lettre_col = Left(Range2.Address(0, 0), (Range2.Column < 27) + 2)
With Range(Lettre_col & "2")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "2 :" & Lettre_col & "5829")
End With
End Sub
Si tu as besoin de plus d'infos n'hésite pas.
Il permet de sélectionner les colonnes sources et destinations (F et K dans ton exemple)
Sub essai()
Dim Num_col As Integer, Num_col2 As Integer, diff As Integer
'déclare les variables correspondantes au numéros des colonnes que l'on sélectionne
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
Num_col = Range1.Column
'on stocke ici le numéro de la colonne sélectionnée
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
Num_col2 = Range2.Column
diff = -(Num_col2 - Num_col) 'ici on fait la différence des numéros de colonne pour inscrire ce résultat dans la formule plus bas Formula RC "diff"
Lettre_col = Left(Range2.Address(0, 0), (Range2.Column < 27) + 2)
With Range(Lettre_col & "2")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "2 :" & Lettre_col & "5829")
End With
End Sub
Si tu as besoin de plus d'infos n'hésite pas.
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
28 oct. 2009 à 12:33
28 oct. 2009 à 12:33
j avoue qu en fait la je commence a etre perdu en fait
en fait au depart je voulais creer un truc qui assiste pour faire des tdc en demandant de choisir a chaque etape les champs necessaire peu importe la grandeur des donnes (nbrs de lignes)
pour en revenir, ca bug, j ai une idee d ou ca vient mais aucune idee comment faire, j ai mis les elements qui posent probleme en gras (je pense demqnder a l utilisateur de choisir ) vu que se sont des variables indefinis et que c est a l utilisateur de les specifier
et j ai souligne un parametre que j arrive pas a virer a savoir le nom du fichier ccm.xls qu il faut remplacer par le nom du fichier qu on utilise c possible que la macro le fasse seule ???
Sub essai()
Dim Num_col As Integer, Num_col2 As Integer, diff As Integer
'déclare les variables correspondantes au numéros des colonnes que l'on sélectionne
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
Num_col = Range1.Column
'on stocke ici le numéro de la colonne sélectionnée
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
Num_col2 = Range2.Column
diff = -(Num_col2 - Num_col) 'ici on fait la différence des numéros de colonne pour inscrire ce résultat dans la formule plus bas Formula RC "diff"
Lettre_col = Left(Range2.Address(0, 0), (Range2.Column < 27) + 2)
With Range(Lettre_col & "2")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "2 :" & Lettre_col & "10 000")
End With
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C10:R5829C11").CreatePivotTable TableDestination:= _
"'[ccm.xls]Sheet1'!R2C13", TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:= _
"Employee Name", ColumnFields:="Price"
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Price")
.Orientation = xlDataField
.Caption = "Nombre de Price" ----------------- ici je pense mettre ColumnFields a la palce
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns("K:K").ClearContents-------------------ici je pense mettre Range2 a la place de K:K
End Sub
en fait au depart je voulais creer un truc qui assiste pour faire des tdc en demandant de choisir a chaque etape les champs necessaire peu importe la grandeur des donnes (nbrs de lignes)
pour en revenir, ca bug, j ai une idee d ou ca vient mais aucune idee comment faire, j ai mis les elements qui posent probleme en gras (je pense demqnder a l utilisateur de choisir ) vu que se sont des variables indefinis et que c est a l utilisateur de les specifier
et j ai souligne un parametre que j arrive pas a virer a savoir le nom du fichier ccm.xls qu il faut remplacer par le nom du fichier qu on utilise c possible que la macro le fasse seule ???
Sub essai()
Dim Num_col As Integer, Num_col2 As Integer, diff As Integer
'déclare les variables correspondantes au numéros des colonnes que l'on sélectionne
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
Num_col = Range1.Column
'on stocke ici le numéro de la colonne sélectionnée
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
Num_col2 = Range2.Column
diff = -(Num_col2 - Num_col) 'ici on fait la différence des numéros de colonne pour inscrire ce résultat dans la formule plus bas Formula RC "diff"
Lettre_col = Left(Range2.Address(0, 0), (Range2.Column < 27) + 2)
With Range(Lettre_col & "2")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "2 :" & Lettre_col & "10 000")
End With
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C10:R5829C11").CreatePivotTable TableDestination:= _
"'[ccm.xls]Sheet1'!R2C13", TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:= _
"Employee Name", ColumnFields:="Price"
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Price")
.Orientation = xlDataField
.Caption = "Nombre de Price" ----------------- ici je pense mettre ColumnFields a la palce
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns("K:K").ClearContents-------------------ici je pense mettre Range2 a la place de K:K
End Sub
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
28 oct. 2009 à 13:26
28 oct. 2009 à 13:26
pou l'enregistrement de ton fichier :
ActiveWorkbook.SaveAs Filename:= ThePath & TheFile
(tu peut préciser d'autre parametres pour la fonction SaveAs comme un mot de passe ...)
où ThePath est le chemin du répertoire cible (" c:\windows.....\")
et TheFile le nom de ton fichier que tu veut ex ("ccm.xls")
après pour les paramètres qui posent problème j'ai pas d'idée
ActiveWorkbook.SaveAs Filename:= ThePath & TheFile
(tu peut préciser d'autre parametres pour la fonction SaveAs comme un mot de passe ...)
où ThePath est le chemin du répertoire cible (" c:\windows.....\")
et TheFile le nom de ton fichier que tu veut ex ("ccm.xls")
après pour les paramètres qui posent problème j'ai pas d'idée
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
28 oct. 2009 à 13:52
28 oct. 2009 à 13:52
ok je vais chercher un peu plus faire des test melanger les adn et me brosser les dents sait on jamais lol ? et des que j ai un bout de soluce je passe par ici
merci
merci
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
28 oct. 2009 à 15:21
28 oct. 2009 à 15:21
Arrrghhhhh!!! Je déteste les TCD!!!
Voici pour toi un code fonctionnel :
Sub essai()
Dim Num_col As Integer, Num_col2 As Integer, Num_col3 As Integer, diff As Integer
'déclare les variables correspondantes au numéros des colonnes que l'on sélectionne
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
Num_col = Range1.Column
'on stocke ici le numéro de la colonne sélectionnée
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
Num_col2 = Range2.Column
diff = -(Num_col2 - Num_col) 'ici on fait la différence des numéros de colonne pour inscrire ce résultat dans la formule plus bas Formula RC "diff"
Lettre_col = Left(Range2.Address(0, 0), (Range2.Column < 27) + 2)
With Range(Lettre_col & "1")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "1 :" & Lettre_col & "10000")
End With
Num_col3 = Num_col2 - 1
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C" & Num_col3 & ":R5829C" & Num_col2).CreatePivotTable TableDestination:="Sheet1!R2C13", TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:="Employee Name", ColumnFields:=Range1
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields(CStr(Range1))
.Orientation = xlDataField
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns(Lettre_col).ClearContents
End Sub
Reste à faire une macro effaçant les TCD au fur et à mesure de l'utilisation.......
Voici pour toi un code fonctionnel :
Sub essai()
Dim Num_col As Integer, Num_col2 As Integer, Num_col3 As Integer, diff As Integer
'déclare les variables correspondantes au numéros des colonnes que l'on sélectionne
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
Num_col = Range1.Column
'on stocke ici le numéro de la colonne sélectionnée
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
Num_col2 = Range2.Column
diff = -(Num_col2 - Num_col) 'ici on fait la différence des numéros de colonne pour inscrire ce résultat dans la formule plus bas Formula RC "diff"
Lettre_col = Left(Range2.Address(0, 0), (Range2.Column < 27) + 2)
With Range(Lettre_col & "1")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "1 :" & Lettre_col & "10000")
End With
Num_col3 = Num_col2 - 1
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C" & Num_col3 & ":R5829C" & Num_col2).CreatePivotTable TableDestination:="Sheet1!R2C13", TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:="Employee Name", ColumnFields:=Range1
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields(CStr(Range1))
.Orientation = xlDataField
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns(Lettre_col).ClearContents
End Sub
Reste à faire une macro effaçant les TCD au fur et à mesure de l'utilisation.......
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
28 oct. 2009 à 16:28
28 oct. 2009 à 16:28
merci a vous deux ca avamce grave on touche presque au but.
Pikaju tu m as vachement avancer maintenant je vais essayer que rowfirels soit choisis par l utilisateur en gras
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C" & Num_col3 & ":R5829C" & Num_col2).CreatePivotTable TableDestination:="Sheet1!R2C13", TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:="Employee Name", ColumnFields:=Range1
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields(CStr(Range1))
.Orientation = xlDataField
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns(Lettre_col).ClearContents
End Sub
et j ai une erreur a cette ligne
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:="Employee Name", ColumnFields:=Range1
mais je sais pas pourquoi
Pikaju tu m as vachement avancer maintenant je vais essayer que rowfirels soit choisis par l utilisateur en gras
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C" & Num_col3 & ":R5829C" & Num_col2).CreatePivotTable TableDestination:="Sheet1!R2C13", TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:="Employee Name", ColumnFields:=Range1
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields(CStr(Range1))
.Orientation = xlDataField
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns(Lettre_col).ClearContents
End Sub
et j ai une erreur a cette ligne
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:="Employee Name", ColumnFields:=Range1
mais je sais pas pourquoi
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
28 oct. 2009 à 16:37
28 oct. 2009 à 16:37
je vais essayer que rowfirels soit choisis par l utilisateur Ah ben non!!!
On a fait en sorte que l'utilisateur choisisse une colonne, que cette colonne soit collée en K (par exemple) pour pouvoir faire un TCD avec J. Je pensais que "Employee Name" faisait obligatoirement partie du TCD...
Tu veux donc que l'utilisateur choisisse 2 colonnes de données et que celles ci se "collent" à la droite de ta base pour réaliser un TCD à partir de ces 2 colonnes? C'est bien ça cette fois?
et j ai une erreur a cette ligne
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:="Employee Name", ColumnFields:=Range1
Peut être n'as tu pas effacé un précédent TCD...
On a fait en sorte que l'utilisateur choisisse une colonne, que cette colonne soit collée en K (par exemple) pour pouvoir faire un TCD avec J. Je pensais que "Employee Name" faisait obligatoirement partie du TCD...
Tu veux donc que l'utilisateur choisisse 2 colonnes de données et que celles ci se "collent" à la droite de ta base pour réaliser un TCD à partir de ces 2 colonnes? C'est bien ça cette fois?
et j ai une erreur a cette ligne
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:="Employee Name", ColumnFields:=Range1
Peut être n'as tu pas effacé un précédent TCD...
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
28 oct. 2009 à 16:28
28 oct. 2009 à 16:28
c est exactement ca, en fait comme j ai des feuilles de donnee differente a chaque fois avec plus ou moins de colone je voulais automatiser la macro et pour que les autres puissent l utiliser qu il demande a chaque etape quoi utiliser
et je ne pense pas pour l erreur, car je test a chaque fois sur un nouveau fichier
et je ne pense pas pour l erreur, car je test a chaque fois sur un nouveau fichier
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
28 oct. 2009 à 17:06
28 oct. 2009 à 17:06
Essaye ceci :
Sub essai()
Dim Num_col As Integer, Num_col2 As Integer, Num_col3 As Integer, Num_col4 As Integer, diff As Integer
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
Set Range3 = Application.InputBox("Sélectionnez le titre de la deuxième variable !", "Sélection de cellules", Type:=8)
Num_col = Range1.Column
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
Num_col2 = Range2.Column
diff = -(Num_col2 - Num_col)
Lettre_col = Left(Range2.Address(0, 0), (Range2.Column < 27) + 2)
With Range(Lettre_col & "1")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "1 :" & Lettre_col & "10000")
End With
Num_col3 = Range3.Column
diff = -((Num_col2 + 1) - Num_col3)
Lettre_col = Left(Range2.Offset(0, 1).Address(0, 0), (Range2.Offset(0, 1).Column < 27) + 2)
With Range(Lettre_col & "1")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "1 :" & Lettre_col & "10000")
End With
Num_col3 = Num_col2 + 1
Num_col4 = Num_col3 + 2
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C" & Num_col2 & ":R5829C" & Num_col3).CreatePivotTable TableDestination:="Sheet1!R2C" & Num_col4, TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:=Range3, ColumnFields:=Range1
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields(CStr(Range1))
.Orientation = xlDataField
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns(Lettre_col).ClearContents
Lettre_col = Range2.Column
Columns(Lettre_col).ClearContents
End Sub
Ca fonctionne parfaitement :
1ère boite de dial : sélection 1ère source de données
2ème boite de dial : sélection 2ème source de données
3ème boite de dial : sélection de la 1ère colonne à droite du tableau
et pif paf pouf...
Sub essai()
Dim Num_col As Integer, Num_col2 As Integer, Num_col3 As Integer, Num_col4 As Integer, diff As Integer
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
Set Range3 = Application.InputBox("Sélectionnez le titre de la deuxième variable !", "Sélection de cellules", Type:=8)
Num_col = Range1.Column
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
Num_col2 = Range2.Column
diff = -(Num_col2 - Num_col)
Lettre_col = Left(Range2.Address(0, 0), (Range2.Column < 27) + 2)
With Range(Lettre_col & "1")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "1 :" & Lettre_col & "10000")
End With
Num_col3 = Range3.Column
diff = -((Num_col2 + 1) - Num_col3)
Lettre_col = Left(Range2.Offset(0, 1).Address(0, 0), (Range2.Offset(0, 1).Column < 27) + 2)
With Range(Lettre_col & "1")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "1 :" & Lettre_col & "10000")
End With
Num_col3 = Num_col2 + 1
Num_col4 = Num_col3 + 2
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C" & Num_col2 & ":R5829C" & Num_col3).CreatePivotTable TableDestination:="Sheet1!R2C" & Num_col4, TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:=Range3, ColumnFields:=Range1
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields(CStr(Range1))
.Orientation = xlDataField
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns(Lettre_col).ClearContents
Lettre_col = Range2.Column
Columns(Lettre_col).ClearContents
End Sub
Ca fonctionne parfaitement :
1ère boite de dial : sélection 1ère source de données
2ème boite de dial : sélection 2ème source de données
3ème boite de dial : sélection de la 1ère colonne à droite du tableau
et pif paf pouf...
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
28 oct. 2009 à 17:29
28 oct. 2009 à 17:29
c est parfait pijapija t es le meilleur dompteur de macro lol
une derniere chose ici "Sheet1!R1C" & Num_col2 & ":R5829C" & Num_col3).CreatePivotTable je peux mettre une fonction pour selectionner la plage ou pas ?
une derniere chose ici "Sheet1!R1C" & Num_col2 & ":R5829C" & Num_col3).CreatePivotTable je peux mettre une fonction pour selectionner la plage ou pas ?
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
29 oct. 2009 à 12:23
29 oct. 2009 à 12:23
toujour le meme principe il suffit de crée un variable , de lui affecter inputbox un peut comme avec le range 1
num_ligne=inputbox...
num_ligne=num_ligne.row '(je suis pas sur de ca mais ca devrai le faire pour la fonction row)
ensuite tu remplace le 5829C par num_ligne
ex :"Sheet1!R1C" & Num_col2 & ":R" & num_ligne & "C" & Num_col3).CreatePivotTable
num_ligne=inputbox...
num_ligne=num_ligne.row '(je suis pas sur de ca mais ca devrai le faire pour la fonction row)
ensuite tu remplace le 5829C par num_ligne
ex :"Sheet1!R1C" & Num_col2 & ":R" & num_ligne & "C" & Num_col3).CreatePivotTable
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
2 nov. 2009 à 10:29
2 nov. 2009 à 10:29
salut a tous dsl du retard mais j ai plus internet a la maison
je rectifie mon code et vous le soumet pour d eventuelle correction
merci a tous
je rectifie mon code et vous le soumet pour d eventuelle correction
merci a tous
manautop
Messages postés
138
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
24 janvier 2013
3
4 nov. 2009 à 18:00
4 nov. 2009 à 18:00
coucou c est encore moi
alors voila ce que j ai fait mais ca ne marche pas , ca ne creait pas le tableau ou je veux
Sub essai()
Dim Num_col As Integer, Num_col2 As Integer, Num_col3 As Integer, Num_col4 As Integer, diff As Integer
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
Set Range3 = Application.InputBox("Sélectionnez le titre de la deuxième variable !", "Sélection de cellules", Type:=8)
Num_col = Range1.Column
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
Num_col2 = Range2.Column
diff = -(Num_col2 - Num_col)
Lettre_col = Left(Range2.Address(0, 0), (Range2.Column < 27) + 2)
Set Num_ligne = Application.InputBox("Sélectionnez eau !", "Sélection de cellules", Type:=8)
Num_ligne = Num_ligne.RowWith Range(Lettre_col & "1")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "1 :" & Lettre_col & "10000")
End With
Num_col3 = Range3.Column
diff = -((Num_col2 + 1) - Num_col3)
Lettre_col = Left(Range2.Offset(0, 1).Address(0, 0), (Range2.Offset(0, 1).Column < 27) + 2)
With Range(Lettre_col & "1")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "1 :" & Lettre_col & "10000")
End With
Num_col3 = Num_col2 + 1
Num_col4 = Num_col3 + 2
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C" & Num_col2 & ":R" & Num_ligne & "C" & Num_col3).CreatePivotTable TableDestination:="Sheet1!R2C" & Num_col4, TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:=Range3, ColumnFields:=Range1
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields(CStr(Range1))
.Orientation = xlDataField
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns(Lettre_col).ClearContents
Lettre_col = Range2.Column
Columns(Lettre_col).ClearContents
End Sub
une iodee quelqu un
alors voila ce que j ai fait mais ca ne marche pas , ca ne creait pas le tableau ou je veux
Sub essai()
Dim Num_col As Integer, Num_col2 As Integer, Num_col3 As Integer, Num_col4 As Integer, diff As Integer
Set Range1 = Application.InputBox("Sélectionnez le titre de la premiere variable !", "Sélection de cellules", Type:=8)
Set Range3 = Application.InputBox("Sélectionnez le titre de la deuxième variable !", "Sélection de cellules", Type:=8)
Num_col = Range1.Column
Set Range2 = Application.InputBox("Sélectionnez la premiere colonne qui touche le tableau !", "Sélection de cellules", Type:=8)
Num_col2 = Range2.Column
diff = -(Num_col2 - Num_col)
Lettre_col = Left(Range2.Address(0, 0), (Range2.Column < 27) + 2)
Set Num_ligne = Application.InputBox("Sélectionnez eau !", "Sélection de cellules", Type:=8)
Num_ligne = Num_ligne.RowWith Range(Lettre_col & "1")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "1 :" & Lettre_col & "10000")
End With
Num_col3 = Range3.Column
diff = -((Num_col2 + 1) - Num_col3)
Lettre_col = Left(Range2.Offset(0, 1).Address(0, 0), (Range2.Offset(0, 1).Column < 27) + 2)
With Range(Lettre_col & "1")
.FormulaR1C1 = "=RC[" & diff & "]"
.AutoFill Destination:=Range(Lettre_col & "1 :" & Lettre_col & "10000")
End With
Num_col3 = Num_col2 + 1
Num_col4 = Num_col3 + 2
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C" & Num_col2 & ":R" & Num_ligne & "C" & Num_col3).CreatePivotTable TableDestination:="Sheet1!R2C" & Num_col4, TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:=Range3, ColumnFields:=Range1
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields(CStr(Range1))
.Orientation = xlDataField
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns(Lettre_col).ClearContents
Lettre_col = Range2.Column
Columns(Lettre_col).ClearContents
End Sub
une iodee quelqu un