Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/11/2011, 14h12   #1
Invité régulier
 
Inscription : juin 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 22
Points : 7
Points : 7
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 :
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
Flop1908 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 02h00   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonsoir
Ci-joint code utilisant les variables tableaux (Je ne vois pas l'origine de l'erreur)
Code :
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 :
Dim i As Long, j As Long
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/11/2011, 09h46   #3
Invité régulier
 
Inscription : juin 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 22
Points : 7
Points : 7
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" ?
Flop1908 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 10h09   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
Citation:
sauf que le tien ne s'arrete pas au début
C'est à dire?

Citation:
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 :
Application.ScreenUpdating = False
désactive la mise à jour affichage à l'écran
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/11/2011, 10h46   #5
Invité régulier
 
Inscription : juin 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 22
Points : 7
Points : 7
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.
Flop1908 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 10h55   #6
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Citation:
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?
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/11/2011, 11h24   #7
Invité régulier
 
Inscription : juin 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 22
Points : 7
Points : 7
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 ?
Flop1908 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 11h36   #8
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Ok mets ton fichier en PJ
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/11/2011, 13h41   #9
Invité régulier
 
Inscription : juin 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 22
Points : 7
Points : 7
Voila le fichier, la macro se trouve dans le module 2.
Fichiers attachés
Type de fichier : zip Referentiel final.zip (245,7 Ko, 4 affichages)
Flop1908 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 14h31   #10
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
A cause de la limitation en longueur du contenu de cellule.
exemple en I1054 tu as du texte de longueur 2795 caractères.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/11/2011, 15h28   #11
Invité régulier
 
Inscription : juin 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 22
Points : 7
Points : 7
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 ?
Flop1908 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 14h53   #12
Invité régulier
 
Inscription : juin 2010
Messages : 22
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 22
Points : 7
Points : 7
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
Flop1908 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h08.


 
 
 
 
Partenaires

Hébergement Web