Erreur 6 : dépassement de capacité, sur une macro

Micke

XLDnaute Nouveau
Bonjour,

Je viens postuler chez vous un peu désespéré... Je vous explique le problème :

J'ai régulièrement des fichiers Excel où je dois séparer les adresses en 3 colonnes
ex :
58 rue des voitures 57777 excelcity, et je dois avoir une colonne avec l'adresse (58 rue...) une avec le code postal et l'autre la ville.

C'est là où en fouillant sur le net j'ai trouvé une superbe macro effectuant le travail.. Mais le hic ça ne marche pas ou plus, en effet dès que je lance la macro cela m'affiche une erreur 6 : dépassement de capacité, même si je sélectionne une ligne.. alors que j'ai réussi à la faire marcher sur le fichier d'origine mais rien sur mes fichier Excel suivant. Quand je fais débogage j'ai une ligne surligné (colorié en rouge ici) Voici la macro en question :

Function mode_calcul() As String
If (Cells(1, 43).Value = 0 Or IsNull(Cells(1, 43).Value)) Then
If (Cells(1, 46).Value = 0 Or IsNull(Cells(1, 46).Value)) Then
If (Cells(1, 60).Value = 0 Or IsNull(Cells(1, 46).Value)) Then
mode_calcul = ""
Else
mode_calcul = "-SLR"
End If
Else
mode_calcul = "-NET"
End If
Else
mode_calcul = "-BRT"
End If


End Function

Function nb_lignes() As Integer
Dim celluleCourante As Variant
Set celluleCourante = Range("A1")
nb_lignes = 1
Do While Not IsEmpty(celluleCourante)
Set celluleCourante = celluleCourante.Offset(1, 0)
nb_lignes = nb_lignes + 1
Loop
If nb_lignes = 1 Then nb_lignes = 2
End Function


Sub Adresses()
Dim dimension As Integer
Dim Cpt As Integer
Dim Cpt2 As Integer
Dim Adresse As String
Dim Ville As String
Dim CP As String
Dim finCP As Integer
Dim chaine As String
Dim Position As Integer

dimension = nb_lignes()
For Cpt = 1 To dimension
chaine = Cells(Cpt, 1)
Position = 0
For Cpt2 = 1 To Len(chaine) - 5
If IsNumeric(Mid(chaine, Cpt2, 6)) And Cpt2 > Position + 2 Then
Position = Cpt2
End If
Next Cpt2
If Position > 0 Then
For finCP = Position To Len(chaine)
If Trim(Mid(chaine, Position, finCP - Position)) <> "" Then
If Not IsNumeric(Mid(chaine, Position, finCP - Position)) Or Len(Mid(chaine, Position, finCP - Position)) > 7 Then Exit For
End If
Next finCP
If finCP > Len(chaine) Then finCP = Len(chaine) + 2
CP = Trim(Mid(chaine, Position, finCP - Position - 1))
finCP = finCP - 1
Adresse = Trim(Left(chaine, Position - 1))
If finCP > Len(chaine) Then finCP = Len(chaine) + 1
Ville = Trim(Right(chaine, Len(chaine) - finCP + 1))
Cells(Cpt, 1) = Adresse
Cells(Cpt, 2) = CP
Cells(Cpt, 3) = Ville
End If
Next Cpt
Range("B1", "B" & dimension).Replace What:=" ", Replacement:=""
End Sub

Etant novice, je ne sais que faire.

Merci beaucoup d'avance, du temps que vous m'accorderez.

Cordialement,

Micke.
 

camarchepas

XLDnaute Barbatruc
Re : Erreur 6 : dépassement de capacité, sur une macro

Bonjour ,

Toutes les variables traitant de nombre de lignes doivent être déclarées en long ,

y compris la fonction :

Function nb_lignes() As Integer doit être modifiée en Function nb_lignes() As long
 

Micke

XLDnaute Nouveau
Re : Erreur 6 : dépassement de capacité, sur une macro

Bonjour camarchepas,

Je ne vois pas trop quelles sont les variables qui dépendent du nombre de ligne exactement... Je sais que c'est beaucoup demander, mais serait-il possible que tu puisses corriger le code VBA ?

En tout cas merci de ton aide.
 

Micke

XLDnaute Nouveau
Re : Erreur 6 : dépassement de capacité, sur une macro

Bonjour,

Finalement en bidouillant je pense avoir réglé le soucis, je sais si quelque chose parait aberrant pour vous. Et si jamais quelqu'un à besoin.


Function mode_calcul() As String
If (Cells(1, 43).Value = 0 Or IsNull(Cells(1, 43).Value)) Then
If (Cells(1, 46).Value = 0 Or IsNull(Cells(1, 46).Value)) Then
If (Cells(1, 60).Value = 0 Or IsNull(Cells(1, 46).Value)) Then
mode_calcul = ""
Else
mode_calcul = "-SLR"
End If
Else
mode_calcul = "-NET"
End If
Else
mode_calcul = "-BRT"
End If


End Function

Function nb_lignes() As Long
Dim celluleCourante As Variant
Set celluleCourante = Range("A1")
nb_lignes = 1
Do While Not IsEmpty(celluleCourante)
Set celluleCourante = celluleCourante.Offset(1, 0)
nb_lignes = nb_lignes + 1
Loop
If nb_lignes = 1 Then nb_lignes = 2
End Function


Sub Adresses()
Dim dimension As Long
Dim Cpt As Long
Dim Cpt2 As Long
Dim Adresse As String
Dim Ville As String
Dim CP As String
Dim finCP As Long
Dim chaine As String
Dim Position As Integer

dimension = nb_lignes()
For Cpt = 1 To dimension
chaine = Cells(Cpt, 1)
Position = 0
For Cpt2 = 1 To Len(chaine) - 5
If IsNumeric(Mid(chaine, Cpt2, 6)) And Cpt2 > Position + 2 Then
Position = Cpt2
End If
Next Cpt2
If Position > 0 Then
For finCP = Position To Len(chaine)
If Trim(Mid(chaine, Position, finCP - Position)) <> "" Then
If Not IsNumeric(Mid(chaine, Position, finCP - Position)) Or Len(Mid(chaine, Position, finCP - Position)) > 7 Then Exit For
End If
Next finCP
If finCP > Len(chaine) Then finCP = Len(chaine) + 2
CP = Trim(Mid(chaine, Position, finCP - Position - 1))
finCP = finCP - 1
Adresse = Trim(Left(chaine, Position - 1))
If finCP > Len(chaine) Then finCP = Len(chaine) + 1
Ville = Trim(Right(chaine, Len(chaine) - finCP + 1))
Cells(Cpt, 1) = Adresse
Cells(Cpt, 2) = CP
Cells(Cpt, 3) = Ville
End If
Next Cpt
Range("B1", "B" & dimension).Replace What:=" ", Replacement:=""
End Sub
 

camarchepas

XLDnaute Barbatruc
Re : Erreur 6 : dépassement de capacité, sur une macro

Micke,

a priori c'était bien les déclarations qui clochait,

Bon , sans un petit fichier avec un jeu de données minimum , je n'irai pas plus loin dans le décodage de ton code .

tu devrais regarder l'instruction Split trés puissante :

Resultat = split("25 rue Victor Hugo 75200 Paris")(0) 'donne 25
Resultat = split("25 rue Victor Hugo 75200 Paris")(1) 'donne Rue

Etc
 

Statistiques des forums

Discussions
312 218
Messages
2 086 359
Membres
103 197
dernier inscrit
sandrine.lacaussade@orang