IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur 1004 dans une macro simple [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 24
    Points
    24
    Par défaut Erreur 1004 dans une macro simple
    Bonjour,

    Alors voici ma macro Excel, elle lit un onglet et compare chaque ligne à un autre onglet. Si les deux lignes correspondent alors on recopie une description.

    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
    'de l'onglet Phy à Nouveau
    Sub Description3()
     
        Dim debut As Long, fin As Long
        'Début du compteur de temps
        debut = GetTickCount()
     
        Dim ligneP, ligneN As Integer
        ligneP = 2
        Dim ClassFirst, ClassSecond, ClassThird, ObjectName, DescriptionEN As String
        Dim trouve As Boolean
     
     
        'On parcours toute la feuille au format Phy
        While IsEmpty(Worksheets("Phy").Range("B" + CStr(ligneP)).Value) = False
     
            'On place le contenu de la ligne en cours dans les variables
            With Worksheets("Phy")
                ClassFirst = .Range("B" + CStr(ligneP))
                ClassSecond = .Range("C" + CStr(ligneP))
                ClassThird = .Range("D" + CStr(ligneP))
                ObjectName = .Range("E" + CStr(ligneP))
                DescriptionEN = .Range("K" + CStr(ligneP))
            End With
            'On cherche la ligne dans le nouveau format
            trouve = False
            ligneN = 2
     
            With Worksheets("Nouveau")
     
                'Premiere passe
                While trouve <> True And IsEmpty(.Range("D" + CStr(ligneN)).Value) = False
     
                'On cherche la ligne correspondante
                If .Range("D" + CStr(ligneN)).Value = ObjectName Then
                    If .Range("C" + CStr(ligneN)).Value = ClassThird Then
                        If .Range("B" + CStr(ligneN)).Value = ClassSecond Then
                            If .Range("A" + CStr(ligneN)).Value = ClassFirst Then
     
                                'Description EN ajouté ERREUR 1004 ICI
                                .Range("F" + CStr(ligneN)).Value = DescriptionEN
                                'On a trouvé
                                trouve = True
                                .Range("G" + CStr(ligneN)).Value = "BOUM"
                                Worksheets("Phy").Range("A" + CStr(ligneP)) = "BOUM"
                            End If
                        End If
                    End If
                End If
                'ligne suivante dans l'onglet nouveau
                ligneN = ligneN + 1
                Wend
     
            End With
            'ligne suivante dans l'onglet Phy
            ligneP = ligneP + 1
     
        Wend
     
        'Fin du compteur
        fin = GetTickCount()
        Debug.Print CStr(TimeSerial(0, 0, (((fin - debut) / 1000))))
        MsgBox "Finito : " + CStr(TimeSerial(0, 0, (((fin - debut) / 1000))))
     
    End Sub
    Le debug me donne l'erreur 1004 au niveau de l'ajout de descriptionEN, en dessous du commentaire 'ERREUR 1004 ICI', ligne 41.

    je suis un peu à court d'idées donc je voudrais vos avis de grands experts

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonsoir
    Ci-joint code utilisant les variables tableaux (Je ne vois pas l'origine de l'erreur)
    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
    Sub Description3()
    Dim LastLigp As Long, LastLign As Long, i As Long, j As Long
    Dim StrRech As String
    Dim Tb, Res
     
     
    Application.ScreenUpdating = False
    With Worksheets("Phy")
        LastLigp = .Cells(.Rows.Count, "B").End(xlUp).Row
        Tb = .Range("A2:K" & LastLigp)
    End With
    With Worksheets("Nouveau")
        LastLign = .Cells(.Rows.Count, "B").End(xlUp).Row
        Res = .Range("B2:G" & LastLign)
    End With
     
    For i = 1 To LastLigp - 1
        StrRech = Tb(i, 2) & "|" & Tb(i, 3) & "|" & Tb(i, 4) & "|" & Tb(i, 5)
        For j = 1 To LastLign - 1
            If Res(j, 1) & "|" & Res(j, 2) & "|" & Res(j, 3) & "|" & Res(j, 4) = StrRech Then
                Res(j, 5) = Tb(i, 11)
                Res(j, 6) = "BOUM"
                Tb(i, 1) = "BOUM"
                Exit For
            End If
        Next j
    Next i
    Worksheets("Phy").Range("A2:K" & LastLigp) = Tb
    Worksheets("Nouveau").Range("B2:G" & LastLign) = Res
    End Sub
    PS : Attention sur ton code aux déclarations des variablesseul j est Long (i est variant)
    Il fallait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim i As Long, j As Long

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Pour commencer merci, le code que tu as écrit fais exactement ce que le mien devait (sauf que le tien ne s'arrete pas au début).

    Par contre la meme erreur 1004 apparait sur la ligne 28

    Et a quoi sert le "Application.ScreenUpdating = False" ?

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    sauf que le tien ne s'arrete pas au début
    C'est à dire?

    Par contre la meme erreur 1004 apparait sur la ligne 28
    Qu'as tu de spéciale dans la feuille Phy? cellules fusionnées?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    désactive la mise à jour affichage à l'écran

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Je voulais dire que le tien s'arrete vers la fin alors que le mien au début, mais c'est pas important ^^.

    Dans l'onglet Phy il n'y a aucune cellule fusionnée, il n'y a absolument rien d'inhabituel ou de particulier dans cet onglet.

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je voulais dire que le tien s'arrete vers la fin alors que le mien au début, mais c'est pas important ^^.
    Rien compris

    Ta feuille Phy est elle protégée?

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Aucune protection sur la feuille, je ne suis pas en lecture seule.

    Si je te donne le fichier, serais-tu en mesure de comprendre le probleme ?

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ok mets ton fichier en PJ

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Voila le fichier, la macro se trouve dans le module 2.
    Fichiers attachés Fichiers attachés

  10. #10
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    A cause de la limitation en longueur du contenu de cellule.
    exemple en I1054 tu as du texte de longueur 2795 caractères.

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Comme cela ne fonctionne toujours pas, et si le nombre de caractere est bien la cause du probleme.

    Quelle serait le nombre maximal de caractère par cellule ?

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Apparement c'est le nombre de lignes qui pose probleme. Si je fait par paquet de 2000 lignes ca fonctionne sans aucune erreur, mais si je veux faire tout le fichier d'un coup alors l'erreur 1004 apparait.

    Donc c'est résolu en quelque sorte.


    Merci mercatog pour le temps que tu as passé sur mon soucis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur 70: dans une macro recursif
    Par Kelap dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/02/2012, 10h57
  2. erreur 429 dans une macro de consultation
    Par emollet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/09/2010, 12h32
  3. Réponses: 1
    Dernier message: 17/07/2008, 22h07
  4. Erreur 1004 sur une boucle simple
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/07/2007, 09h00
  5. [VB-E] Erreur 1004 dans une boucle For
    Par lycaon dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/11/2006, 22h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo