Bug passage 2000 vers 2003

Nillou42 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 Nillou42 -
Bonjour,

J'ai développé il y a quelques temps une macro vba sous Excel 2000 qui fonctionne parfaitement. Celle ci ne marche plus du tout avec Excel 2003. Le message d'erreur est le suivant : Erreur d'exécution 13 - incompatibilité de type.

Apparemment ce bug est assez courrant entre les différentes versions de Office. J'ai trouvé pas mal de discussions à ce sujet mais j'ai jamais eu de réponse pour mon cas.

Est ce dû à un problème de ressources système ou simplement à une "erreur" de déclaration ?

Pour résumer, cette macro permet de nettoyer un fichier de données exporté en .txt d'un système d'information géographique. Ce fichier est une sorte de tableau permettant de connaitre les delais de parcours entre plusieurs adresses, les distances parcourues entre ces points et la vitesse moyenne du trajet.

Je ne peux pas trop mettre le code entier de cette macro sur le net, pb professionnel !
Donc voici le code partiel de cette macro (le bug se fait au niveau de la ligne "Worksheets(1).Cells(i, 4) = Worksheets(1).Cells(i, 3) + delais" )

Option Explicit
Dim i, j, n As Integer
Dim val_voie As String
Dim clean As String
Dim DerniereCelluleRemplie
Dim commune As String

Sub Secto()
'
' Secto Macro
' Macro enregistrée le 15/10/2007 par pinede
' Dernière modification 02/04/2009 par pinede
'

Sheets.Add.Move after:=Sheets(Sheets.Count) 'ajoute une feuille à la suite de la première
Sheets(1).Activate 'rend la feuille 1 active
Call derniere_cellule
Call nettoyer_depart
Call nettoyer_arrivee
Call coupe_colonne
Call calcul_delais
Call tri_delais
Call transforme_minsec
Call transpose
Call concatene_13_15
Worksheets(2).Activate 'rend la feuille 2 active
Worksheets(2).Cells.Select 'selectionne toutes les cellules de la feuille 2
Selection.Font.Size = 8 'taille police=8
Selection.Font.Name = "arial" 'police=arial
Selection.RowHeight = 27 'hauteur de cellule=27
Selection.WrapText = True 'retour à ligne automatique autorisé
Selection.HorizontalAlignment = xlHAlignCenter 'texte centré
Selection.VerticalAlignment = xlVAlignCenter 'texte centré
ActiveCell.Select 'selectionne la cellule active et donc déselectionne la plage de cellules de la feuille 2
Worksheets(2).Name = "ORGINAL"
Call ajuste_nom_complet
Call colorier
'Call tri_1_5
Call nom_commune
Worksheets(2).Rows(1).Select
Selection.AutoFilter
Worksheets(2).Cells(2, 1).Select
ActiveWindow.FreezePanes = True
Call ajuste_titre
Call mise_en_page_feuille1
Worksheets(2).Name = "ORIGINAL"
Worksheets(2).Copy after:=Worksheets(2)
Worksheets(3).Name = "ETUDE"
Worksheets(3).Cells(1, 1).Select
Call mise_en_page_feuille3
Worksheets(3).Cells(1, 1).Select
End Sub

Sub derniere_cellule()
DerniereCelluleRemplie = Columns("A:A").Find("*", Range("A1"), , , xlByRows, xlPrevious).Row 'recherche la dernière cellule non vide de la colonne A
'MsgBox DerniereCelluleRemplie 'facultatif bien sûr ...
'Range("A" & DerniereCelluleRemplie).Select
End Sub

Sub nettoyer_depart() 'macro qui prépare la colonne départ du fichier issu du distancier
i = 1
For i = DerniereCelluleRemplie To 1 Step -1
clean = Left(Cells(i, 1), 4) 'la variable clean récupère les 4 premiers caractères des cellules de la colonne 1
If clean <> "CIS " Then Rows(i).Delete 'supprime les lignes dont la cellule 1 ne commence pas par CIS
Next i
i = 1
While Worksheets(1).Cells(i, 1) <> ""
Worksheets(1).Cells(i, 1).Replace What:="CIS ", Replacement:="", MatchCase:=True 'recherche les lignes dont la cellule 1 commence par le mot CIS et le supprime
i = i + 1
Wend
End Sub

Sub nettoyer_arrivee() 'macro qui prépare la colonne arrivée du fichier issu du distancier
i = 1
For i = DerniereCelluleRemplie To 1 Step -1
clean = Left(Cells(i, 2), 4) 'la variable clean récupère les 4 premiers caractères des cellules de la 2° colonne
If clean = "CIS " Then Rows(i).Delete 'supprime les lignes dont la cellule 1 commence par CIS
Next i
End Sub

Sub coupe_colonne()
Worksheets(1).Columns(3).Delete Shift:=xlToLeft 'supprime la colonne 3 distances
Worksheets(1).Columns(4).Delete Shift:=xlToLeft 'supprime la colonne 4 vitesse moyenne
End Sub

Sub calcul_delais() 'macro qui calcul le temps réel de départ : tps de préparation + trajets
Dim delais As Single
i = 1
While Worksheets(1).Cells(i, 1) <> ""
If Worksheets(1).Cells(i, 1) = "SEVERINE" Or Worksheets(1).Cells(i, 1) = "TARARE (69)" Or Worksheets(1).Cells(i, 1) = "ANDREZIEUX BOUTHEON" Or Worksheets(1).Cells(i, 1) = "ROANNE" Or Worksheets(1).Cells(i, 1) = "MONTBRISON" Or Worksheets(1).Cells(i, 1) = "ST ETIENNE LA TERRASSE" Or Worksheets(1).Cells(i, 1) = "ST ETIENNE LA METARE" Or Worksheets(1).Cells(i, 1) = "LE BERLAND ROCHE" Or Worksheets(1).Cells(i, 1) = "FIRMINY" Or Worksheets(1).Cells(i, 1) = "LE CHAMBON FEUGEROLLES" Or Worksheets(1).Cells(i, 1) = "ST CHAMOND" Or Worksheets(1).Cells(i, 1) = "RIVE DE GIER" Or Worksheets(1).Cells(i, 1) = "ST ETIENNE CHAVANELLE" Or Worksheets(1).Cells(i, 1) = "GIVORS (69)" Or Worksheets(1).Cells(i, 1) = "ROUSSILLON (38)" Or Worksheets(1).Cells(i, 1) = "ANNONAY (07)" Or Worksheets(1).Cells(i, 1) = "VIENNE (38)" Then
delais = 2 '2 min pour les CIS pro et mixtes
Else
delais = 7 '7 min pour les CIS volontaires
End If
Worksheets(1).Cells(i, 4) = Worksheets(1).Cells(i, 3) + delais <-----------"ERREUR"
i = i + 1
Wend
Worksheets(1).Columns(3).Delete Shift:=xlToLeft 'supprime la colonne 3 trajets
End Sub

.....etc....

Sub mise_en_page_feuille1()
i = 1
Worksheets(1).Activate 'rend la feuille 1 active
Worksheets(1).Cells(1, 1).EntireRow.Insert
Worksheets(1).Cells(1, 1) = "DEPART" 'titre
Worksheets(1).Cells(1, 2) = "ARRIVEE"
Worksheets(1).Cells(1, 3) = "TPS"
Worksheets(1).Columns(1).ColumnWidth = 30 'largeur automatique de la colonne
Worksheets(1).Columns(2).ColumnWidth = 40 'largeur automatique de la colonne
Worksheets(1).Columns(3).ColumnWidth = 11 'largeur automatique de la colonne
While Worksheets(1).Cells(1, i) <> ""
Worksheets(1).Cells(1, i).Activate
With ActiveCell
.HorizontalAlignment = xlHAlignCenter 'texte aligné à gauche
.VerticalAlignment = xlVAlignCenter 'texte centré
.WrapText = True 'retour à ligne automatique autorisé
.Font.Size = 10 'taille police=8
.Font.Name = "arial" 'police=arial
.Font.Bold = True 'texte en gras
End With
i = i + 1
Wend
Worksheets(1).Rows(1).Select
Selection.AutoFilter
End Sub

Sub mise_en_page_feuille3()
Worksheets(3).AutoFilterMode = False
Worksheets(3).Columns(13).Delete Shift:=xlToLeft 'supprime la colonne 12
Worksheets(3).Columns(13).Delete Shift:=xlToLeft 'supprime la colonne 13
Worksheets(3).Cells(1, 1).Select
Worksheets(3).Cells(1, 13) = "N° Liste"
Worksheets(3).Cells(1, 13).Select
Selection.Font.Bold = True
Worksheets(3).Rows(1).Select
Selection.AutoFilter
End Sub

Merci d'avance !
A voir également:

2 réponses

pilas31 Messages postés 1878 Statut Contributeur 647
 
Bonjour,

Cela fait penser à une erreur produite parceque dans l'une des cellules (à priori en colonne C) il y a une valeur qui n'est pas numérique mais qui est du texte. Peut-être à cause du séparateur virgule à la place du point ou le contraire.

C'est dans ce genre de cas qu'une incompatibilité de type se produit (ajout d'un texte avec la variable delais qui est numérique)

A+
0
Nillou42
 
Bonjour,

Je prends note de votre réponse. Je vais essayer de regarder de ce côté là. Effectivement l'ensemble des données étant récupérées via un fichier .txt, elles n'ont pas de format spécifique.

Par contre ce qui m'étonne fortement c'est que jusqu'à présent cette macro fonctionne parfaitement avec Excel 2000 ???

Je vais regarder si j'arrive à trouver le problème sinon j'attends vos solutions !

Merci ;)
A+
0