erreur1004: erreur définie par l'application ou par l'objet

sandy13

XLDnaute Nouveau
Bonjour à tous. j'ai rédigé un petit bout de code. Mais lorsque je l'exécute, j'obtient une erreur à la ligne en rouge: "erreur1004: erreur définie par l'application ou par l'objet". SVP aidez moi. :(



Code:
Sub traitement()
Dim i, n, j As Integer
Dim tab1() As String 'tableau dynamique récapitulatif des messages
Dim tab2() As Integer 'tableau de stockage des numéros de lignes
n = 0 'taille du tableau dynamique


For j = 2 To 10000 'Enregistrement des messages dans un tableau dynamique
ReDim Preserve tab1(n)
ReDim Preserve tab2(n)
If Cells(j, 1) <> "" And Cells(j, 1) <> "(vide)" And Cells(j, 1) <> "Total général" Then
tab1(n) = Cells(j, 1) 'remplissage des tableaux
tab2(n) = j
n = n + 1
End If

Next
For j = 0 To UBound(tab1())
If tab1(j) Like ("*2L*") Or tab1(j) Like ("*3L*") Or tab1(j) Like ("*4L*") Or tab1(j) Like ("*5L*") Or tab1(j) Like ("*6L*") Or tab1(j) Like ("*7L*") Then
Cells(tab2(j), 3) = "0.5"
Else
Cells(tab2(j), 3) = "1"
End If
Next

End Sub
 

job75

XLDnaute Barbatruc
Re : erreur1004: erreur définie par l'application ou par l'objet

Bonjour sandy13, JJ1,

Pour la 2ème boucle For écrivez :

Code:
For j = 0 To UBound(tab1) - 1
La macro beuguait car le dernier élément de tab2 contient toujours la valeur 0.

En effet le dernier élément de tab2 (et de tab1) n'est jamais renseigné.

A+
 

job75

XLDnaute Barbatruc
Re : erreur1004: erreur définie par l'application ou par l'objet

Re,

En fait il est mieux et plus classique d'écrire :

Code:
'-----
For j = 2 To 10000 'Enregistrement des messages dans un tableau dynamique
  If Cells(j, 1) <> "" And Cells(j, 1) <> "(vide)" And Cells(j, 1) <> "Total général" Then
    ReDim Preserve tab1(n)
    ReDim Preserve tab2(n)
    tab1(n) = Cells(j, 1) 'remplissage des tableaux
    tab2(n) = j
    n = n + 1
  End If
Next
If n = 0 Then Exit Sub 'séurité
For j = 0 To UBound(tab1)
'-----
A+
 

Si...

XLDnaute Barbatruc
Re : erreur1004: erreur définie par l'application ou par l'objet

salut

Code:
Sub traitement()
  Dim i As Long, n As Long, j As Long '[B]pour chacun[/B]
  Dim tab1() As String 'tableau dynamique récapitulatif des messages
  Dim tab2() As Integer 'tableau de stockage des numéros de lignes
  For j = 2 To 10000 'Enregistrement des messages dans un tableau dynamique
    If Cells(j, 1) <> "" And Cells(j, 1) <> "(vide)" And Cells(j, 1) <> "Total général" Then
      n = n + 1 'ici puis partir de 1
      ReDim Preserve tab1(n)
      ReDim Preserve tab2(n)
      tab1(n) = Cells(j, 1) 'remplissage des tableaux
      tab2(n) = j
    End If
  Next
  For j = 1 To UBound(tab1())
    If tab1(j) Like ("*2L*") Or tab1(j) Like ("*3L*") Or tab1(j) Like ("*4L*") Or tab1(j) Like ("*5L*") Or tab1(j) Like ("*6L*") Or tab1(j) Like ("*7L*") Then
      Cells(tab2(j), 3) = "0.5"
    Else
      Cells(tab2(j), 3) = "1"
    End If
  Next
End Sub
 

job75

XLDnaute Barbatruc
Re : erreur1004: erreur définie par l'application ou par l'objet

Re,

Je suppose que vous utilisez des tableaux pour vous entrainer au VBA...

Car il est bien plus simple (et plus rapide) d'écrire :

Code:
Sub traitement()
Dim i As Integer
For i = 2 To 10000
  If Cells(i, 1) <> "" And Cells(i, 1) <> "(vide)" And Cells(i, 1) <> "Total général" Then _
    Cells(i, 3) = IIf(Cells(i, 1) Like ("*2L*") Or Cells(i, 1) Like ("*3L*") Or Cells(i, 1) Like ("*4L*") _
      Or Cells(i, 1) Like ("*5L*") Or Cells(i, 1) Like ("*6L*") Or Cells(i, 1) Like ("*7L*"), 0.5, 1)
Next
End Sub
A+
 

Discussions similaires

Réponses
6
Affichages
234
Réponses
19
Affichages
2 K

Statistiques des forums

Discussions
312 174
Messages
2 085 949
Membres
103 057
dernier inscrit
SOP