Je viens de tester tes lignes de code et pas de pb !!
Quel sont les messages d'erreur ?
Parce que là je vois pas ?
Ou est placé ton code ?
- dans un module
- dans le code d'une feuille ?
- dans une userform ?
Bonne nuit
@+
Je viens de tester tes lignes de code et pas de pb !!
Quel sont les messages d'erreur ?
Parce que là je vois pas ?
Ou est placé ton code ?
- dans un module
- dans le code d'une feuille ?
- dans une userform ?
Bonne nuit
@+
quand tu utilise Cells "tous seul " , sans rien devant ... celle-ci porte sur la feuille excel active... et si la feuille excel est un graphique ... tu as erreur ... !Envoyé par 47-47
active la feuille concerné... avant...
Code : Sélectionner tout - Visualiser dans une fenêtre à part sheets(2).activate![]()
Rebonjour tout le monde !
Bon, vu que le code en lui-même semble bon, voici le code de toute la macro... à nouveau, je vais essayer de trouver les endroits ou plante le code et y mettre des **...
Donc sur les 2, je sélectionne la feuille juste avant... donc à n'y plus rien comprendre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 Sub Nouveau_client() Sheets(2).Select a1 = "A1" r = 1 c = 1 **While Cells(r, c) <> ""** r = r + 1 Wend Cells(1, 5).Value = r Cells(2, 5).Value = "C" Cells(3, 5).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)" a2 = Cells(3, 5).Value Cells(2, 5).Value = "B" Cells(3, 5).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)" a21 = Cells(3, 5).Value Cells(2, 5).Value = "A" Cells(3, 5).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)" a3 = Cells(3, 5).Value Cells(1, 5).Value = r - 1 Cells(3, 5).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)" a4 = Cells(3, 5).Value Cells(1, 5).Value = a1 Cells(2, 5).Value = a2 Cells(3, 5).Value = ":" Cells(4, 5).FormulaR1C1 = "=CONCATENATE(r[-3]c,r[-1]c,r[-2]c)" plage = Cells(4, 5).Value Cells(1, 5).Value = a4 Cells(2, 5).Value = a3 Cells(4, 5).FormulaR1C1 = "=CONCATENATE(r[-3]c,r[-1]c,r[-2]c)" plage1 = Cells(4, 5).Value Cells(1, 5).Value = a1 Cells(2, 5).Value = a21 Cells(4, 5).FormulaR1C1 = "=CONCATENATE(r[-3]c,r[-1]c,r[-2]c)" plagegraph1 = Cells(4, 5).Value Range("E1:E4").Delete For i = 2 To Sheets.Count Worksheets(i).Activate Rows(r).Insert shift:=xlDown Cells(r - 1, 1).Select Selection.AutoFill Destination:=Range(plage1), Type:=xlFillDefault Range(plage).Select Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal ActiveSheet.ChartObjects("Graphique 1").Activate ActiveChart.ChartArea.Select ActiveChart.SetSourceData Source:=ActiveSheet.Range(plagegraph1), _ PlotBy:=xlColumns Next i Sheets(1).Select Cells(1, 8).Value = r Cells(2, 8).Value = "F" Cells(3, 8).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)" a2 = Cells(3, 8).Value Cells(1, 8).Value = a1 Cells(2, 8).Value = a2 Cells(3, 8).Value = ":" Cells(4, 8).FormulaR1C1 = "=CONCATENATE(r[-3]c,r[-1]c,r[-2]c)" plage = Cells(4, 8).Value Range("H1:H4").Delete Range(plage).Select Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Sheets(2).Select **Cells(1, 5).Value = r** Cells(2, 5).Value = "A" Cells(3, 5).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)" a1 = "A2" a2 = Cells(3, 5).Value Cells(1, 5).Value = a1 Cells(2, 5).Value = a2 Cells(3, 5).Value = ":" Cells(4, 5).FormulaR1C1 = "=CONCATENATE(r[-3]c,r[-1]c,r[-2]c)" plage = Cells(4, 5).Value Range("E1:E4").Delete For i = 2 To Sheets.Count Worksheets(i).Activate Range(plage).Select Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Next i End Sub
je n'ai pas dis sélectionner ... mais ActiverEnvoyé par 47-47
et bien... même en activant les feuilles, j'ai encore des erreurs...
Bonsoir 47-47
j'ai bien compris ton code qui sert à construire des adresses
Personellement je ne procède pas de cette façon car c'est très lourd d'écrire dans des cellules puis de concatener le tout etc...
je me sert de la propriété CurrentRegion qui prend tout le tableau situé autour de la selection.
Attention pas de ligne vide dans le tableau
Donc, dans ton cas, A1.currentRegion me delimite le tableau en A1:B10 pour Feuil2
Ensuite tu te sert de la propiété offset (si besoin est !!) pour determiner un point de départ
et de la propriété Resize pour determiner le nombre de lignes et de colonnes.
et pour finir la propriété Address pour avoir les coordonnées de la plage définie.
Ex : pour que a2 = "C22" avec A1.CurrentRegion
Voici comment je construis tes variables
Code : Sélectionner tout - Visualiser dans une fenêtre à part a2 = tbl.Offset(1 , 2).Resize(1, 2).Address(RowAbsolute:=False, ColumnAbsolute:=False)
mais toutes ne sont pas necessaires disont que c'est pour la compréhension !
teste ceci comme cela tu ne sera pas embêté par tes messages d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Set tbl = ActiveSheet.Range("A1").CurrentRegion r = tbl.Rows.Count + 1 a2 = tbl.Offset(tbl.Rows.Count, 2).Resize(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) a21 = tbl.Offset(tbl.Rows.Count, 1).Resize(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) a3 = tbl.Offset(tbl.Rows.Count, 0).Resize(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) a4 = tbl.Offset(tbl.Rows.Count - 1, 0).Resize(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) Plage = tbl.Resize(tbl.Rows.Count + 1, tbl.Columns.Count + 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) Plage1 = tbl.Offset(tbl.Rows.Count - 1, 0).Resize(2, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) Plagegraph1 = tbl.Resize(tbl.Rows.Count + 1, 2).Address(RowAbsolute:=False, ColumnAbsolute:=False)
et comme on dit c'est quand même plus mieux !!
Essaye de faire comme te dis bbil pour le .Activate
Allez Bonne fin de fin de semaine
@+
Oki, je vais essayer...
Et pour le code, je sais que le mien n'est pas optimale, même très loin de là, mais pour dire que ca fait 1 semaine que je code en VB-Excel... je trouve ca déjà pas mal... lool
Mais merci bcp pour ton code, je vais l'essayer dès que possible, et c'est vrai que ca va l'alléger un bon bout...
Bonne fin de soirée, week-end, et semaine...
Edit:
en relisant ton code, je me demande si j'ai pas meilleur temps de le faire ainsi, afin d'obtenir une adresse du genre "A1:C10" (pour faire un tri sur l'ensemble de mon tableau...)
Si je comprends bien le code, ceci devrait me donner ce que je disais plus haut... et même que dans ce cas, l'offset ne serait pas nécessaire, exact??!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part a2 = tbl.Offset(0,0).Resize(tbl.Rows.Count, 3).Address(RowAbsolute:=False, ColumnAbsolute:=False)
EDIT2:
après tester, j'ai corrigé le code, le offset se trouve à 0,0... mais peut également être supprimé...Et en effet, à mon avis, j'ai meilleur temps de faire comme dit plus haut, directement prendre la plage entière...
Voilà, à première vue, toutes mes macros fonctionnent !Par contre, un dernier petit soucis... afin d'éviter quelques erreurs possibles...
Travaillant sur les graphiques, ceux-ci n'ont pas toujours le même nom interne... y a-t-il un moyen pour les changer???
Bonjour 47-47,
CTRL + clique sur le graphique
Son nom apparaîtra alors dans la zone Noms ( la même que pour les plages nommées ) et tu pourras renommer ton
graphique.
En VBA:
Voila cela te convient-il ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part feuil1.shapes("graphique3").name = "Mon nouveau nom"
@ +
J'ai regardé à l'instant, hormis le code VBA, et c'est bien celà ! C'est parfait![]()
Si c'est parfait 47-47 profites-en pour un!!
@+
Ben... je reviens à la charge, car c'est pas tout à fait résolu...
Je me suis peut-être un peu précipité, et je n'ai pas testé avec plusieurs graphiques...
Le problème que ca me pose maintenant, c'est que si un graphique a été nommé en interne "Graphique 1", je ne peux pas attribuer à un autre graphique ce même nom même si le premier a été renommé en "Graphique N"...
Je vais donc juste voir avec les macros, maintenant, si cela fonctionne... mais... si ca ne fonctionne pas, faudra que je cherche un autre moyen... je vous tiens au courant dès que possible...
EDIT:
Il semble que le code de la macro que tu m'as montré précédemment fonctionne exactement de la même manière...donc... c'est peut-être un peu rapé pour cette méthode...
Mais en fouillant un peu plus, j'ai découvert une solution... lolSupprimé les graphiques présents, recréer les uns après les autres, et les renommés... Car une fois renommé, le nom présent est bien utilisé pour les macros, et vu que des précédents étaient là, le numéro est supérieur, mais comme il ne retrouve pas les numéros que je lui mets, il les attribue au nouveau graphique...
![]()
rebonjour (enfin, plutot bonjour, car je ne l'avais pas dit avant... lol),
j'ai 2 petites questions, dont une qui était en suspens...
1.- qui concerne plus excel lui-même que les macros, j'ai une erreur avec les échelles logarythmiques, et des formules...
en gros, j'ai un graphique qui prend des données fournies par des formules (sommes de 3 mois), mais il y en a qui sont à 0...
Dès que la valeur = 0, et qu'elle est donnée par une formule, il m'est impossible d'avoir une échelle logarythmique...
Vous est-il possible de me donner une solution??!!
2.- là, je ne comprends pas mon problème...
dans mon code (que tu m'as en partie fourni Bouley), il y a:
Pourquoi est-ce que r vaut ici 46, et que plage me donne du style "A5:C50" ??!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Sheets(2).Activate Set tbl = ActiveSheet.Range("A5").CurrentRegion r = tbl.Rows.Count + 1 plage = tbl.Resize(tbl.Rows.Count + 1, 3).Address(rowabsolute:=False, columnabsolute:=False)
A part ca, j'arrive bientot au bout, j'ai bientot fini de copier les macros dans le fichier final... mais j'ai ce problème...
Grand merci d'avance pour m'aider à finir ces macros... et de m'avoir m'aidé jusqu'à présent !
EDIT:
pour la 2ème, j'ai trouvé ! C'est l'histoire du +1 et du début du tableau, en A5...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager