Bonjour,
je veux trier un tableau sur 3 colonnes, mais ma macro m'affiche l'erreur d'exécution '13' incompatibilité de type???
ça correspond à quoi cette erreur?
et merci
Bonjour,
je veux trier un tableau sur 3 colonnes, mais ma macro m'affiche l'erreur d'exécution '13' incompatibilité de type???
ça correspond à quoi cette erreur?
et merci
Bonjour argaz01
tu fais comment comment pour effectuer ton tri, as tu au moin quelque chose à présenter.![]()
Bonjour
Sans le code ce sera dur, en général c'est une mauvaise déclaration des variables (tableau dans ton cas), donc typage, et tu veux lui affecter une donnée d'un autre type.
Mais sans code.
Philippe
Voici mon code:
Quand ça marche, ça me chomboule complétement mon tableau, alors que ce que je cherche c'est de trier mes lignes en fonction de leur contenue correspondant dals une colonne.
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 Sub MacroTri() 'Dim ws1 As Worksheet, ws2 As Worksheet Dim Lws1 As Long, Lws2 As Long, LmemNb As Long Dim memNb As Integer Dim TypeP As String 'Le nom des feuilles est à modifier ici Set ws1 = Worksheets("Feuil1") 'Feuille lecture Set ws2 = Worksheets("Feuil2") 'Feuile ecriture 'selection de la feuille en lecture ws1.Select 'on commence par effectuer un tri sur 3 colonne ws1.Columns("A:C").Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("A2") _ , Order2:=xlAscending, Header:=xlYes Lws1 = 2: Lws2 = 2: TypeP = "": memNb = 0 'init des variables utilisées 'boucle dans la feuille en lecture attention il ne faut pas de trou Do While ws1.Cells(Lws1, 1) <> "" 'si le type est <> If TypeP <> ws1.Cells(Lws1, 2) Then TypeP = ws1.Cells(Lws1, 2) 'memorisation du type ws2.Cells(Lws2, 1) = ws1.Cells(Lws1, 2) 'ecriture du type 'gestion du total If memNb <> 0 Then ws2.Cells(LmemNb, 2) = memNb 'ecriture du total au numero de ligne mémorisé LmemNb = Lws2: memNb = 0 Lws2 = Lws2 + 1 End If memNb = memNb + ws1.Cells(Lws1, 3) 'mémorisation du total ws2.Cells(Lws2, 1) = ws1.Cells(Lws1, 1) 'écriture du produit ws2.Cells(Lws2, 2) = ws1.Cells(Lws1, 3) 'écriture du nombre Lws1 = Lws1 + 1: Lws2 = Lws2 + 1 'incrémentation des lignes Loop Set ws1 = Nothing Set ws2 = Nothing End Sub
Merci
RE
je me disais aussi que je reconnaissais ce code, la prochaine fois essaye de préciser l'historique du problème, ça aide
post précédent macros pour trier un tableau vers une nouvelle feuille excel
pourrais-tu préciser sur quel ligne tu as le problème, ce ne serais pas celle-la par hasardsi oui il faut tester la présence d'une valeur numerique avant de faire l'addition
Code : Sélectionner tout - Visualiser dans une fenêtre à part memNb = memNb + ws1.Cells(Lws1, 3) 'mémorisation du total
Code : Sélectionner tout - Visualiser dans une fenêtre à part If IsNumber(ws1.Cells(Lws1, 3)) Then memNb = memNb + ws1.Cells(Lws1, 3) 'mémorisation du total
regarde la colonne C si par hasard tu n'as pas une valeur non integer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part memNb = memNb + ws1.Cells(Lws1, 3) 'mémorisation du total
Ci-joint, amélioration de lisibilité du code (mais bon, chacun a ses habitudes d'écriture)
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 Sub MacroTri() Dim ws1 As Worksheet, ws2 As Worksheet Dim LastLig As Long, Lws1 As Long, Lws2 As Long, LmemNb As Long Dim memNb As Integer Dim TypeP As String 'Le nom des feuilles est à modifier ici Set ws1 = Worksheets("Feuil1") 'Feuille lecture Set ws2 = Worksheets("Feuil2") 'Feuile ecriture 'on commence par effectuer un tri sur 3 colonne With ws1 LastLig = .Cells(Rows.Count, 1).End(xlUp).Row .Range("A1:C" & LastLig).Sort Key1:=.Range("B2"), Order1:=xlAscending, Key2:=.Range("A2"), Order2:=xlAscending, Header:=xlYes Lws2 = 2 'init des variables utilisées 'boucle dans la feuille en lecture attention il ne faut pas de trou For Lws1 = 2 To LastLig 'si le type est <> If TypeP <> .Range("B" & Lws1).Value Then TypeP = .Range("B" & Lws1).Value 'memorisation du type ws2.Cells(Lws2, 1) = TypeP 'ecriture du type 'gestion du total If memNb <> 0 Then ws2.Range("B" & LmemNb).Value = memNb 'ecriture du total au numero de ligne mémorisé LmemNb = Lws2 memNb = 0 Lws2 = Lws2 + 1 End If memNb = memNb + .Range("C" & Lws1).Value 'mémorisation du total ws2.Range("A" & Lws2).Value = .Range("A" & Lws1).Value 'écriture du produit ws2.Range("B" & Lws2).Value = .Range("C" & Lws1).Value 'écriture du nombre Lws2 = Lws2 + 1 'incrémentation des lignes Next Lws1 End With Set ws1 = Nothing Set ws2 = Nothing End Sub
Partager