Bonjour,
Je me tourne vers vous car je seche completement ! J'essaye de créer un fond de carte à l'aide d'un fichier svg depuis excel (le plus simple dans office) à l'aide du script suivant :
Le probleme est le suivant le code fonctionne très bien pour un nombre limité de point par exemple (qqu seconde pour générer l'objet grand max) :
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 Option Explicit '--------------------------------------------------------------------------------------------------------- ' Importation du fichier SVG des départements et création des formes libres '--------------------------------------------------------------------------------------------------------- ' Utilisation des valeurs de la feuille Departements '--------------------------------------------------------------------------------------------------------- Function CreateShapes() Dim oSheet As Excel.Worksheet ' Feuille de travail Dim lLine As Long ' Compteur de lignes Dim lCoord As String ' Coordonnées du département Dim lCoordArray As Variant ' Coordonnées du département en tableau Dim lCptCoord As Long ' Compteur pour parcourir les coordonnées Dim lNbShape As Long ' Nombre de formes créées Dim lShapeRange() ' Tableaux des noms de formes créées pour fonction Group Dim loFreeformBuilder As Excel.FreeformBuilder 'Constructeur de forme libre ' Feuille de données Set oSheet = Sheets("Commune") ' Parcours la feuille des données For lLine = 1 To 10 ' Coordonnées lCoord = oSheet.Cells(lLine, 1) ' Mise en forme des coordonnées lCoord = Replace(lCoord, "M", "M ") lCoord = Replace(lCoord, "L", " L ") 'lCoord = Replace(lCoord, "Z", " Z") lCoord = Replace(lCoord, "C", "C ") ' Crée un tableau à partir de la chaîne de caractères lCoordArray = Split(lCoord, " ") ' Initialise le compteur lCptCoord = LBound(lCoordArray) Do Select Case lCoordArray(lCptCoord) Case "M" ' Point de départ ' Crée un constructeur de "forme libre" pour le département courant sur la feuille oSheet Set loFreeformBuilder = oSheet.Shapes.BuildFreeform(msoEditingCorner, Val(lCoordArray(lCptCoord + 1)) * 10, Val(lCoordArray(lCptCoord + 2)) * 10) lCptCoord = lCptCoord + 3 Case "L" ' Segment loFreeformBuilder.AddNodes msoSegmentLine, msoEditingAuto, Val(lCoordArray(lCptCoord + 1)) * 10, Val(lCoordArray(lCptCoord + 2)) * 10 lCptCoord = lCptCoord + 3 Case "C" ' Courbe loFreeformBuilder.AddNodes msoSegmentCurve, msoEditingCorner, Val(lCoordArray(lCptCoord + 1)) * 10, Val(lCoordArray(lCptCoord + 2)) * 10, Val(lCoordArray(lCptCoord + 3)) * 10, Val(lCoordArray(lCptCoord + 4)) * 10, Val(lCoordArray(lCptCoord + 5)) * 10, Val(lCoordArray(lCptCoord + 6)) * 10 lCptCoord = lCptCoord + 7 Case "Z" ' Fin de la forme ' Converti le Constructeur en Forme With loFreeformBuilder.ConvertToShape ' Identifiant du département .Name = oSheet.Cells(lLine, 2) ' Incrémente le nombre de formes créées lNbShape = lNbShape + 1 ' Redimensionne le tableau de formes créées ReDim Preserve lShapeRange(1 To lNbShape) ' Ajoute le nom de la forme au tableau pour groupement lShapeRange(lNbShape) = .Name End With ' Libère l'objet constructeur Set loFreeformBuilder = Nothing ' Sort de la boucle de traitement des coordonnées Exit Do End Select Loop Next ' Groupe les départements dans une forme 'With oSheet.Shapes.Range(lShapeRange).Group '.Name = "CarteFrance" '.ScaleHeight 0.05, msoFalse '.ScaleWidth 0.05, msoFalse '.LockAspectRatio = msoTrue End With End Function
Mais excel plante complétement avec des formes plus complexes comme
Code : Sélectionner tout - Visualiser dans une fenêtre à part M2.237 3.579 C2.237 3.579 0 3.579 0 3.579 C0 3.579 0 0 0 0 C0 0 0.474 0 0.474 0 C0.474 0 0.474 3.157 0.474 3.157 C0.474 3.157 2.237 3.157 2.237 3.157 C2.237 3.157 2.237 3.579 2.237 3.579 Z
D'ou peut provenir ce bug ? Merci à tous
Code : Sélectionner tout - Visualiser dans une fenêtre à part M1546.8 1209.37L1546.86 1209.19L1547.82 1208.83L1548.66 1208.95L1549.2 1209.31L1549.62 1210.09L1549.98 1211.41L1550.52 1212.19L1551.42 1212.85L1552.2 1213.15L1554.84 1213.33L1556.52 1213.81L1557.84 1214.59L1558.68 1215.37L1559.34 1216.93L1560.54 1218.43L1560.66 1218.61L1561.5 1218.43L1562.1 1218.25L1564.68 1219.99L1565.64 1220.35L1566.24 1220.89L1568.82 1222.09L1570.44 1222.63L1571.22 1222.93L1571.76 1223.47L1571.88 1223.83L1571.88 1225.27L1571.64 1226.47L1571.64 1227.91L1572.18 1229.95L1573.02 1231.93L1574.22 1234.27L1574.22 1234.33L1574.4 1234.99L1575.48 1236.01L1577.4 1237.57L1578.72 1238.35L1579.86 1239.25L1581.66 1240.99L1583.58 1243.09L1584 1243.27L1584.66 1243.39L1585.98 1243.75L1586.7 1244.29L1587.42 1245.31L1587.9 1245.85L1588.02 1245.91L1589.64 1247.53L1590.42 1247.77L1590.84 1247.77L1591.2 1247.05L1591.38 1246.81L1591.5 1246.27L1591.98 1245.43L1592.4 1244.77L1592.88 1243.81L1593.42 1242.55L1594.74 1241.17L1595.58 1240.81L1596 1240.15L1597.14 1239.61L1598.28 1238.65L1598.94 1237.75L1599.06 1237.63L1599 1237.27L1598.04 1235.83L1597.98 1235.17L1597.62 1234.69L1596.9 1234.03L1596.54 1233.43L1596.18 1232.71L1596 1231.93L1596.36 1230.97L1596.78 1230.67L1597.08 1230.49L1597.44 1230.43L1597.86 1230.49L1599.66 1231.03L1600.44 1231.21L1601.22 1231.09L1601.82 1230.85L1602.66 1229.83L1603.14 1229.29L1605.42 1228.09L1605.9 1227.73L1606.5 1227.13L1606.68 1226.65L1606.74 1225.99L1605.36 1225.21L1605.36 1223.71L1605.6 1222.81L1605.72 1222.57L1607.52 1222.57L1608.3 1222.45L1611.72 1220.11L1612.56 1219.51L1612.74 1219.51L1613.64 1218.73L1614.3 1218.31L1614.78 1218.07L1616.64 1217.11L1619.82 1215.07L1621.56 1213.81L1623.36 1212.37L1625.1 1211.11L1625.94 1210.21L1626.6 1209.37L1627.26 1208.71L1628.1 1207.39L1628.1 1207.33L1628.4 1206.91L1628.34 1206.43L1628.52 1205.83L1628.82 1204.81L1629.24 1203.37L1629.9 1201.33L1630.98 1198.27L1630.98 1198.09L1631.1 1197.91L1631.82 1195.87L1632 1194.67L1632.24 1191.85L1632.18 1191.55L1631.52 1190.53L1631.58 1190.05L1631.7 1189.45L1630.5 1188.37L1629.48 1187.83L1629.42 1187.83L1627.2 1186.33L1626.66 1186.63L1626.54 1186.63L1626.18 1186.45L1625.64 1186.15L1625.7 1185.73L1625.7 1185.25L1625.16 1184.71L1624.56 1185.31L1624.32 1185.61L1623 1185.37L1622.46 1185.13L1621.44 1184.53L1621.02 1183.57L1620.3 1181.41L1620.3 1180.87L1620.54 1180.45L1620.54 1179.31L1621.08 1178.53L1621.32 1177.57L1621.62 1176.79L1623 1174.87L1623.42 1174.15L1623.72 1173.55L1623.84 1172.95L1623.9 1171.63L1624.02 1170.73L1624.2 1170.25L1623.66 1169.95L1623.24 1169.89L1622.1 1169.83L1621.86 1169.41L1621.68 1169.11L1620.84 1168.87L1617.36 1167.61L1614.9 1166.41L1614 1167.73L1612.08 1167.25L1609.26 1166.59L1608.18 1166.05L1607.7 1165.93L1606.92 1167.07L1605.84 1168.15L1605.48 1168.15L1604.76 1167.55L1603.08 1165.87L1602.6 1165.33L1600.74 1163.71L1600.02 1163.05L1599.78 1162.93L1597.02 1164.61L1596.36 1164.91L1596.24 1165.33L1595.76 1166.53L1595.58 1167.73L1595.58 1168.87L1595.7 1169.77L1592.76 1169.41L1591.26 1169.35L1590.42 1169.53L1590.42 1170.79L1590.24 1171.27L1589.88 1171.81L1587.54 1173.07L1587.3 1173.37L1587.12 1173.91L1586.76 1174.39L1586.28 1174.87L1584.66 1176.43L1583.82 1177.15L1583.1 1178.35L1582.86 1178.95L1582.32 1180.45L1582.02 1181.29L1581.66 1182.13L1581.18 1182.91L1581.54 1183.21L1581.54 1183.63L1581.24 1184.71L1581.06 1185.85L1580.82 1185.97L1580.64 1185.97L1580.1 1185.25L1579.92 1185.25L1579.62 1185.55L1578.48 1185.73L1577.52 1186.93L1577.58 1187.11L1578.72 1188.25L1576.86 1188.25L1576.02 1187.65L1575.6 1187.47L1575.54 1187.89L1575.84 1188.01L1575.9 1188.19L1575.72 1188.73L1576.02 1188.97L1576.02 1189.57L1574.28 1189.57L1573.68 1189.45L1573.32 1189.45L1572.72 1190.11L1571.64 1191.85L1571.22 1192.87L1571.1 1193.83L1570.38 1193.83L1569.96 1193.65L1569.42 1193.59L1567.2 1194.49L1566.36 1194.49L1565.94 1194.25L1565.52 1193.29L1558.86 1192.69L1558.62 1192.81L1557.36 1193.77L1556.28 1194.25L1554.66 1194.61L1553.64 1195.09L1552.92 1195.51L1551.78 1195.75L1551.36 1195.27L1551 1194.49L1550.58 1192.51L1550.28 1191.73L1549.5 1190.59L1549.44 1189.75L1549.32 1189.09L1549.08 1188.79L1548.66 1187.53L1548.24 1187.05L1547.94 1186.57L1547.28 1186.15L1546.8 1186.09L1546.8 1186.39L1545.3 1186.27L1544.88 1186.09L1544.04 1184.83L1543.5 1184.47L1542.78 1183.57L1542.06 1182.37L1541.28 1182.25L1540.86 1179.19L1540.26 1177.33L1539.78 1176.61L1539.06 1176.31L1538.64 1176.01L1537.44 1175.17L1529.34 1168.21L1529.1 1167.97L1528.68 1167.73L1528.74 1169.29L1528.56 1170.67L1527.96 1172.11L1528.92 1174.09L1529.22 1175.17L1529.34 1178.35L1529.64 1179.43L1530.48 1181.35L1530.48 1182.07L1530.24 1183.03L1530.18 1184.05L1530.36 1185.49L1530.36 1186.63L1530 1187.29L1529.58 1188.13L1529.28 1188.85L1528.74 1189.09L1526.7 1189.45L1522.98 1190.05L1522.02 1190.35L1522.2 1191.13L1522.26 1191.67L1522.08 1192.69L1521.78 1193.83L1520.76 1194.61L1520.46 1195.03L1518.96 1196.23L1517.82 1198.03L1517.76 1198.57L1518.66 1201.27L1518.78 1204.51L1521.9 1206.01L1523.22 1207.39L1523.64 1207.81L1523.94 1208.23L1525.68 1209.55L1528.32 1210.57L1529.16 1210.51L1530 1210.09L1530.54 1210.15L1534.5 1212.43L1535.28 1212.85L1535.76 1212.85L1536.66 1212.25L1540.2 1210.39L1541.94 1208.95L1544.88 1210.63L1545.12 1210.63L1546.8 1209.37Z
nico
Partager