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
Bonjour, je galere un peu aujourd hui pour une macro,
je voudrais savoir comment creer une boite de dialogue sous excel qui demande de selectioner une plage de donnee avec la souris ou sans

le but etant de l incorporer dans un autre macro que j ai devloppe avec deja beaucoup d aide lol de tableau dynamique.

donc en gros par exemple il faudrait que cela me demande de selectionner la plage de cellule correspondante
a chaque etape...


voila le lien du fichier pour l exemple http://www.cijoint.fr/cjlink.php?file=cj200910/cijIAh4jgm.xls

et voila le code de ma macro pour ceux qui ont la flemme

Sub essai()
Columns("M:V").Clear

Range("K1") = Range("F1")
With Range("K2")
.FormulaR1C1 = "=RC[-5]"
.AutoFill Destination:=Range("K2:K5829")
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"
.Function = xlCount
End With
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveWorkbook.ShowPivotTableFieldList = False
Columns("K:K").ClearContents

ccm.xls: mettre le nom du fichier réel



merciiii
A voir également:

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 743
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
1
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
merciiiiii
0
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
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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!!
0
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
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
0

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
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
0
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
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
0
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
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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?
0
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
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....
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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?
0
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
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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.
0
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
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
0
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
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
0
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
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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.......
0
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
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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...
0
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
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
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...
0
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
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 ?
0
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
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
0
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
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
0
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
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.Row
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 & ":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
0