Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/11/2011, 15h09   #1
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 396
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 396
Points : 420
Points : 420
Par défaut Problème d'identification de colonnes

Bonjour,

Dans une de mes macros, je dois identifier certaines colonnes contenant des quantités en stock pour pouvoir mettre ces colonnes au format nombre.
J'arrive à identifier mes colonnes sans problèmes mais le code bloque sur cette ligne :

Code :
With .Columns(ColQty1, ColQty2, ColQty3, ColQty4, ColQty5, ColQty6, ColQty7, ColQty8, ColQty9, ColQty10, ColQty11)
Avec le message suivant : Run-time error '450' - Wrong number of arguments orinvalid property assignment

Ci-dessous la fin de mon code (le début se passe bien) :

Code :
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
'MEF des cellules au format nombre et monétaire + ligne d'en-tête en gras
 
'Nombre
 
    Set Qty1 = .Cells.Find("Initial Stock Qty.", LookIn:=xlValues)
    Set Qty2 = .Cells.Find("Purchase quantity", LookIn:=xlValues)
    Set Qty3 = .Cells.Find("Batch Transfer Qty.", LookIn:=xlValues)
    Set Qty4 = .Cells.Find("Journals Receipt Qty.", LookIn:=xlValues)
    Set Qty5 = .Cells.Find("Cantidad transferencia", LookIn:=xlValues)
    Set Qty6 = .Cells.Find("Cantidad consumo para compras", LookIn:=xlValues)
    Set Qty7 = .Cells.Find("Prod. Receipt Qty.", LookIn:=xlValues)
    Set Qty8 = .Cells.Find("Prod. Issue Qty.", LookIn:=xlValues)
    Set Qty9 = .Cells.Find("Other consumptions Qty.", LookIn:=xlValues)
    Set Qty10 = .Cells.Find("Sales quantity", LookIn:=xlValues)
    Set Qty11 = .Cells.Find("Final Stock Qty.", LookIn:=xlValues)
    ColQty1 = Qty1.Column
    ColQty2 = Qty2.Column
    ColQty3 = Qty3.Column
    ColQty4 = Qty4.Column
    ColQty5 = Qty5.Column
    ColQty6 = Qty6.Column
    ColQty7 = Qty7.Column
    ColQty8 = Qty8.Column
    ColQty9 = Qty9.Column
    ColQty10 = Qty10.Column
    ColQty11 = Qty11.Column
 
        With .Columns(ColQty1, ColQty2, ColQty3, ColQty4, ColQty5, ColQty6, ColQty7, ColQty8, ColQty9, ColQty10, ColQty11)
            .NumberFormat = "#,##0.00"
        End With
Les variable Qtyx ont été définies en tant que Range et les ColQty en tant que Byte.

Pouvez-vous m'aider SVP ?

D'avance merci !
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 17h00   #2
Membre Expert
 
Avatar de rvtoulon
 
Homme Hervé
Agent Technique
Inscription : mars 2009
Messages : 823
Détails du profil
Informations personnelles :
Nom : Homme Hervé
Âge : 36
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Agent Technique
Secteur : Santé

Informations forums :
Inscription : mars 2009
Messages : 823
Points : 1 441
Points : 1 441
Bonjour,
fait un tour sur l'aide d'excel et tu veras que tu ne peux pas mettre plusieurs arguments avec l'expression "columns".
Par contre tu peux par exemple utiliser l'expression "Union".

Voici un exemple qui colorie en rouge les colonnes D et F de la feuille 1
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub test()
With Sheets(1)
Set Col1 = .Columns(4)
Set Col2 = .Columns(6)
 
Set mescol = Union(Col1, Col2)
 
mescol.Interior.ColorIndex = 3
 
End With
 
End Sub
sur le principe ceci ressemble à ton code
adapte le a tes besoins
__________________
@+

Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
Ou sur si ce n'est pas le cas
rvtoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 17h13   #3
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 396
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 396
Points : 420
Points : 420
Bonjour rvtoulon (qui a perdu sa photo !)

Ca ne fonctionne pas.
Voilà mon code en entier. ca bloque toujours sur la même ligne avec "Object does not support this proporty or method".
As-tu une idée de ce qui coince ? J'ai il me semble correctement adapté ton code...

Code :
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
Sub Prepare_data()
 
'Définition des dimensions
 
Dim LRPMP As Long
Dim ItemGroup As Range, ItemNumber As Range, MyWarehouse As Range, MyTreatment As Range, MyPackaging As Range, MyBag As Range, MyBatchNumber As Range
Dim ItemGroupCol As Byte, ItemNumberCol As Byte, WarehouseCol As Byte, TreatmentCol As Byte, PackagingCol As Byte, BagCol As Byte, BatchNumberCol As Byte, ColGap As Byte, ColGap2 As Byte, ColGap3 As Byte, ColGap4 As Byte, ColGap5 As Byte, ColGap6 As Byte
Dim Qty1 As Range, Qty2 As Range, Qty3 As Range, Qty4 As Range, Qty5 As Range, Qty6 As Range, Qty7 As Range, Qty8 As Range, Qty9 As Range, Qty10 As Range, Qty11 As Range
Dim ColQty1 As Byte, ColQty2 As Byte, ColQty3 As Byte, ColQty4 As Byte, ColQty5 As Byte, ColQty6 As Byte, ColQty7 As Byte, ColQty8 As Byte, ColQty9 As Byte, ColQty10 As Byte, ColQty11 As Byte
Dim Curr1 As Range, Curr2 As Range, Curr3 As Range, Curr4 As Range, Curr5 As Range, Curr6 As Range, Curr7 As Range, Curr8 As Range, Curr9 As Range, Curr10 As Range, Curr11 As Range, Curr12 As Range, Curr13 As Range, Curr14 As Range, Curr15 As Range, Curr16 As Range, Curr17 As Range, Curr18 As Range, Curr19 As Range
Dim ColCurr1 As Byte, ColCurr2 As Byte, ColCurr3 As Byte, ColCurr4 As Byte, ColCurr5 As Byte, ColCurr6 As Byte, ColCurr7 As Byte, ColCurr8 As Byte, ColCurr9 As Byte, ColCurr10 As Byte, ColCurr11 As Byte, ColCurr12 As Byte, ColCurr13 As Byte, ColCurr14 As Byte, ColCurr15 As Byte, ColCurr16 As Byte, ColCurr17 As Byte, ColCurr18 As Byte, ColCurr19 As Byte
 
'Figer l'écran
 
Application.ScreenUpdating = False
 
'Réinitialiser feuille "PMP"
 
    With Sheets("PMP")
        .Cells.ClearContents
 
        With .Cells
            .HorizontalAlignment = xlLeft
            .NumberFormat = "General"
 
            With .Font
                .Name = "Arial"
                .Size = 10
                .FontStyle = "Normal"
            End With
 
            With .Borders
                .LineStyle = xlNone
            End With
 
            With .Interior
                .Pattern = xlNone
            End With
 
        End With
 
        .Activate
        .Range("A1").Select
        If AutoFilterMode = True Then AutoFilterMode = False
 
    End With
 
'Copier/coller les données de la feuille "Original PMP" vers la feuille "PMP"
 
    With Sheets("Original PMP")
 
        .Range("A1:" & .Range("A1").SpecialCells(xlCellTypeLastCell).Address).Copy Sheets("PMP").Range("A1")
 
    End With
 
'Déterminer la place des colonnes "Item Number" et "Item Group" dans le fichier et insérer 7 colonnes à la suite de "Item Group"
 
    With Sheets("PMP")
 
    Set ItemGroup = .Cells.Find("Item group", LookIn:=xlValues)
    Set ItemNumber = .Cells.Find("Item number", LookIn:=xlValues)
    ItemGroupCol = ItemGroup.Column
    ItemNumberCol = ItemNumber.Column
    ColGap = ItemGroupCol - ItemNumberCol
 
    .Range(ItemGroup.Offset(0, 1), ItemGroup.Offset(0, 7)).EntireColumn.Insert
 
    .Range(ItemGroup.Offset(0, 1), ItemGroup.Offset(0, 7)) = Array("Gestion Stock", "Compte", "Espèce", "Génération", "Entrepôt", "Stade", "Concatener")
 
    LRPMP = .Range("A" & .Rows.Count).End(xlUp).Row
 
'Formule RECHERCHEV pour déterminer "Gestion Stock"
 
        With .Range(ItemGroup.Offset(1, 1), ItemGroup.Offset(LRPMP - 1, 1))
            .Formula = "=VLOOKUP(RC[" & -ColGap - 1 & "],'Tab Art'!C1:C17,17,0)"
            .Value = .Value
        End With
 
'Formule DROITE pour déterminer le compte
 
        With .Range(ItemGroup.Offset(1, 2), ItemGroup.Offset(LRPMP - 1, 2))
            .Formula = "=RIGHT(RC[-2],3)"
            .Value = .Value
        End With
 
'Formule GAUCHE pour déterminer l'espèce
 
        With .Range(ItemGroup.Offset(1, 3), ItemGroup.Offset(LRPMP - 1, 3))
            .Formula = "=LEFT(RC[-3],1)"
            .Value = .Value
        End With
 
'Formules GAUCHE de DROITE pour déterminer la génération
 
        With .Range(ItemGroup.Offset(1, 4), ItemGroup.Offset(LRPMP - 1, 4))
            .Formula = "=RIGHT(LEFT(RC[" & -ColGap - 4 & "],12),1)"
            .Value = .Value
        End With
 
'Déterminer la place de la colonne "Warehouse" et formule SI pour déterminer "Entrepôt"
 
    Set MyWarehouse = .Cells.Find("Warehouse", LookIn:=xlValues)
    WarehouseCol = MyWarehouse.Column
    ColGap2 = WarehouseCol - ItemGroupCol
 
        With .Range(ItemGroup.Offset(1, 5), ItemGroup.Offset(LRPMP - 1, 5))
            .Formula = "=IF(LEFT(RC[" & ColGap2 - 5 & "],2)=""Z0"",""NON"",""OUI"")"
            .Value = .Value
        End With
 
'Formule SI pour déterminer "Stade"
 
        With .Range(ItemGroup.Offset(1, 6), ItemGroup.Offset(LRPMP - 1, 6))
            .Formula = "=IF(OR(RIGHT(RC[" & -ColGap - 6 & "],1)=""A"",RIGHT(RC[" & -ColGap - 6 & "],1)=""B"",RIGHT(RC[" & -ColGap - 6 & "],1)=""C""),RIGHT(RC[" & -ColGap - 6 & "],1),""COM"")"
            .Value = .Value
        End With
 
'Déterminer la place de toutes les colonnes utiles à la formule CONCATENER pour déterminer "Concatener"
 
    Set MyTreatment = .Cells.Find("Treatment", LookIn:=xlValues)
    Set MyPackaging = .Cells.Find("Packaging", LookIn:=xlValues)
    Set MyBag = .Cells.Find("Bag", LookIn:=xlValues)
    Set MyBatchNumber = .Cells.Find("Batch number", LookIn:=xlValues)
    TreatmentCol = MyTreatment.Column
    PackagingCol = MyPackaging.Column
    BagCol = MyBag.Column
    BatchNumberCol = MyBatchNumber.Column
    ColGap3 = TreatmentCol - ItemGroupCol
    ColGap4 = PackagingCol - ItemGroupCol
    ColGap5 = BagCol - ItemGroupCol
    ColGap6 = BatchNumberCol - ItemGroupCol
 
        With .Range(ItemGroup.Offset(1, 7), ItemGroup.Offset(LRPMP - 1, 7))
            .Formula = "=CONCATENATE(RC[" & -ColGap - 7 & "],RC[" & ColGap3 - 7 & "],RC[" & ColGap4 - 7 & "],RC[" & ColGap5 - 7 & "],RC[" & ColGap2 - 7 & "],RC[" & ColGap6 - 7 & "])"
            .Value = .Value
        End With
 
'MEF des cellules au format nombre et monétaire + ligne d'en-tête en gras
 
'Nombre
 
    Set Qty1 = .Cells.Find("Initial Stock Qty.", LookIn:=xlValues)
    Set Qty2 = .Cells.Find("Purchase quantity", LookIn:=xlValues)
    Set Qty3 = .Cells.Find("Batch Transfer Qty.", LookIn:=xlValues)
    Set Qty4 = .Cells.Find("Journals Receipt Qty.", LookIn:=xlValues)
    Set Qty5 = .Cells.Find("Cantidad transferencia", LookIn:=xlValues)
    Set Qty6 = .Cells.Find("Cantidad consumo para compras", LookIn:=xlValues)
    Set Qty7 = .Cells.Find("Prod. Receipt Qty.", LookIn:=xlValues)
    Set Qty8 = .Cells.Find("Prod. Issue Qty.", LookIn:=xlValues)
    Set Qty9 = .Cells.Find("Other consumptions Qty.", LookIn:=xlValues)
    Set Qty10 = .Cells.Find("Sales quantity", LookIn:=xlValues)
    Set Qty11 = .Cells.Find("Final Stock Qty.", LookIn:=xlValues)
    ColQty1 = Qty1.Column
    ColQty2 = Qty2.Column
    ColQty3 = Qty3.Column
    ColQty4 = Qty4.Column
    ColQty5 = Qty5.Column
    ColQty6 = Qty6.Column
    ColQty7 = Qty7.Column
    ColQty8 = Qty8.Column
    ColQty9 = Qty9.Column
    ColQty10 = Qty10.Column
    ColQty11 = Qty11.Column
 
    Set MyQtyCol = .Union(ColQty1, ColQty2, ColQty3, ColQty4, ColQty5, ColQty6, ColQty7, ColQty8, ColQty9, ColQty10, ColQty11)
 
            MyQtyCol.NumberFormat = "#,##0.00"
 
    End With
 
End Sub
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 09h31   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Union est une méthode de l'objet Application, pas de l'objet Worksheet. Si tu regardes bien ce que t'as donné Hervé, il n'y a pas de point avant Union.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 11h19   #5
Membre Expert
 
Avatar de rvtoulon
 
Homme Hervé
Agent Technique
Inscription : mars 2009
Messages : 823
Détails du profil
Informations personnelles :
Nom : Homme Hervé
Âge : 36
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Agent Technique
Secteur : Santé

Informations forums :
Inscription : mars 2009
Messages : 823
Points : 1 441
Points : 1 441
Bonjour,
La remarque de zebreloup est correcte,
j'ai pas trop regarder ton code mais je ferais comme ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
'Les arguments pour union doivent être des ranges donc:
Set ColQty1 = .Columns(Qty1.Column)
Set ColQty2 = .Columns(Qty2.Column)
Set ColQty3 = .Columns(Qty3.Column)
'ETC....
 
'Et comme ceci, pas de point avant union
Set MyQtyCol = Union(ColQty1, ColQty2, ColQty3, ColQty4, ColQty5, ColQty6, ColQty7, ColQty8, ColQty9, ColQty10, ColQty11)
 
 MyQtyCol.NumberFormat = "#,##0.00"
n'oublie pas que F1 (l'aide est ton ami )et qu'une recherche avec le mot union t'en apprendras beaucoup.
__________________
@+

Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
Ou sur si ce n'est pas le cas
rvtoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 11h36   #6
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 396
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 396
Points : 420
Points : 420
Bonjour à vous deux (superbe photo Hervé !)

Merci pour le .Union incorrect. Malheureusement, lorsque je l'enlève, la macro me renvoie pour la ligne "Tap Mysmatch" ou quelque chose du genre.
Mais je suis passé par un autre moyen sans utiliser Union.
Je mets Résolu car je suis sûr que vos solutions sont parfaitement correctes mais que c'est moi qui fait la quiche.
Je reviens vers vous de suite avec un nouveau sujet, plus épineux je pense.
Encore merci pour vos réponses, bonne journée Messieurs !
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h29.


 
 
 
 
Partenaires

Hébergement Web