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 19/08/2011, 16h51   #1
Futur Membre du Club
 
Homme
Étudiant
Inscription : août 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2011
Messages : 34
Points : 16
Points : 16
Par défaut Erreur 1004, grand débutant

Bonjour à tous,

Je suis un très grand débutant en VBA?

J'essaie depuis quelques jours de faire en sorte que sous deux conditions excel copie automatiquement une ligne de 28 cellule d'une page ici "GPostes" feuille 4, sur la feuille deux nommé Plannings.

Je suis arrivé après avoir perdu de nombreux litre de sueur et quelques touffes de cheveux à force de m'arracher la tête ... à ceci (le code appartient à l'objet feuille 2) :

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
Sub mise_à_jour_postes()
 
    Dim i As Integer
    Dim GS As Range
    Dim PS As Range
    Dim DS As Range
 
    Set DS = (Sheets("Gpostes").Range("C5:AD5"))
    Set GS = (Sheets("Gpostes").Range("C9:AD9"))
    Set PS = (Sheets("Gpostes").Range("C13:AD13"))
 
i = 7
While i <= 68
    If Range("C" & i).Value = "Oui" Then
        If Range("C" & i + 1).Value = "Oui" Then
           DS.Select
            Selection.Copy
            Range("D" & i + 1).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End If
    ElseIf Range("C" & i).Value = "Non" Then
        If Range("C" & i + 1).Value = "Oui" Then
            GS.Select
            Selection.Copy
            Range("D" & i + 1).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End If
    ElseIf Range("C" & i).Value = "Oui" Then
        If Range("C" & i + 1).Value = "Non" Then
            PS.Select
            Selection.Copy
            Range("D" & i).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End If
    Else
    End If
i = i + 2
Wend
End Sub
Il y a surement beaucoup plus simple, j'aimerai cependant comprendre pouruquoi ce bout de code ne marche pas et affiche: "erreur d'execution 1004 défini par l'objet ou l'appli" lorsqu'il essai d'executer une des ligne GS.select, DS.select ou PS.select?
PolyAmide est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 17h04   #2
Futur Membre du Club
 
Homme
Consultant MOA
Inscription : août 2011
Messages : 16
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : août 2011
Messages : 16
Points : 16
Points : 16
Bonjour,

Je viens de copier ton code dans un module d'un nouveau classeur.

Aucune Erreur ne se déclenche.

Par contre plutot que d'utiliser :
Selection.Copy et Selection.PasteSpecial
Tu pourrais utiliser :
Code :
ActiveSheet.Range("F22:H22").Value = ActiveSheet.Range("F20:H20").Value
De plus, il me semble que l'utilisation de "Cells" serait plus facile:
Cells(i,3) à la place de Range("C" & i)
Pour finir, si tu comptes utiliser plusieurs onglets, n'oublie pas de les noter.

Cdt
Yersin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 17h05   #3
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 847
Points : 16 847
Envoyer un message via Skype™ à bbil
il y as quelques truc à changer dans ton code .. on évite d'utiliser Select et Selection...

tu oubli de préciser le classeur et feuille pour tes "range" au départ si la feuille est dans le même classeur que le classeur contenant ta macro :
modifie les lignes
Code :
1
2
3
4
 
Set DS = ThisWokbook.Sheets("Gpostes").Range("C5:AD5")
    Set GS = ThisWokbook.Sheets("Gpostes").Range("C9:AD9")
    Set PS = ThisWokbook.Sheets("Gpostes").Range("C13:AD13")
pour toutes tes lignes Range... il te faut aussi préciser le classeur pour cela utilise un With par exemple avec ThisWorkBook.sheets("Gpostes") s'il s'agit du même classeur ou Worbooks.("MonClasseur.xls") pour d'autre classeurs, et supprime les Select et sélection.

Code :
1
2
3
4
5
6
7
8
9
 With ThisWorkbook.Sheets("Gpostes")
    If .Range("C" & i).Value = "Oui" Then
        If .Range("C" & i + 1).Value = "Oui" Then
           DS.Copy
           .Range("D" & i + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End If
(...)
end with
Wend
l'ajout du point devant range associé au with permet d'éviter la répétition du nom de classeur ...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 17h08   #4
Futur Membre du Club
 
Homme
Étudiant
Inscription : août 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2011
Messages : 34
Points : 16
Points : 16
Merci beaucoup j'essaie ceci de suite.

Je galère pas mal donc ça risque de prendre du temps.
PolyAmide est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 17h54   #5
Futur Membre du Club
 
Homme
Étudiant
Inscription : août 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2011
Messages : 34
Points : 16
Points : 16
Le Code s'est la merde, mais quand ça marche comme on veut s'est merveilleux.

Merci à vous deux, je me suis servis des deux conseils. voici le résultat, si jamais ça peut servir à un futur novice comme moi :

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
Sub mise_à_jour_postes()
 
    Dim i As Integer
    Dim GS, PS, DS As Range
 
    Set DS = Sheets("GPostes").Range("C5:AD5")
    Set GS = Sheets("GPostes").Range("C9:AD9")
    Set PS = Sheets("GPostes").Range("C13:AD13")
 
i = 7
 
With ThisWorkbook.Sheets("Plannings")
While i <= 68
    If .Cells(i, 3).Value = "Oui" Then
        If .Cells(i + 1, 3).Value = "Oui" Then
            DS.Copy
            .Range("D" & i + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End If
    ElseIf .Cells(i, 3).Value = "Non" Then
        If .Cells(i + 1, 3).Value = "Oui" Then
            GS.Copy
            .Range("D" & i + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End If
    ElseIf .Cells(i, 3).Value = "Oui" Then
        If .Cells(i + 1, 3).Value = "Non" Then
            PS.Copy
            .Range("D" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End If
    Else
    End If
i = i + 2
Wend
End With
End Sub
PolyAmide est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 17h57   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 847
Points : 16 847
Envoyer un message via Skype™ à bbil
Avec cette ligne tu utilise la feuille Gpostes du classeur actif ..:
Code :
 Set DS = Sheets("GPostes").Range("C5:AD5")
si le classeur actif change ou n'est pas le bon tu auras une erreur .. il vaut mieux préciser le classeur concerné peu-être avec un With...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 18h20   #7
Futur Membre du Club
 
Homme
Étudiant
Inscription : août 2011
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2011
Messages : 34
Points : 16
Points : 16
Oui ou pardonnez moi si je me trompe,

En faite le code est enregistré dans l'objet feuil2 (plannings) du classeur concerné donc je ne pense pas que cela soit nécessaire. Cependant je ne suis pas encore bien à l'aise avec le vocabulaire adapté (je me suis lancé il y a une semaine à peine) donc il est possible que je me trompe.
PolyAmide 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 11h28.


 
 
 
 
Partenaires

Hébergement Web