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/01/2012, 09h26   #1
 
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 4
Points : -1
Points : -1
Par défaut Création de lien entre les données de deux feuilles

Bonjour et bonne année à tous,

je vais essayer de faire au mieux pour me faire comprendre, et pour ce faire je fais utiliser un fichier exemple..

J'ai demandé à un professeur de m'aider, et il m'a fourni ce fichier exemple (ci-joint) qui vous permettra de voir ce que je cherche à faire et la macro utilisée (Si on change la semaine ou la couleur d'un article en Feuil1, il doit changer automatiquement en Feuil2).

Or, en essayant d'adapter sa macro à mon fichier, cela me fait une erreur d'éxecution 1004 : "Erreur définie par l'application ou par l'objet".

Voici la macro que j'ai modifié pour mon fichier, focalisée sur la ligne ou s'affiche 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
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
Sub Planning()

 (...) 

'suppression des données de Plan2
Sheets("Plan2").Select
Rows("6:30").Select           'les lignes 6 à 30 sont supprimées (augmenter si nécessaire)
Selection.Delete Shift:=xlUp
Cells(6, 1).Select

'sélection de la feuille des données de départ Plan_Proto
Sheets("Plan_Proto").Select

'sélection de la case de titre d'action
Cells(4, 7).Select

'Parcourir toute la liste des actions jusqu'à arriver à une case vide (normalement fin de la liste)
Do Until Selection.Value = ""

'sélection de la case en dessous pour passer à l'action suivante    
Selection.Offset(1, 0).Select
    
'récupération des informations de l'action
Action = Selection.Value                    'Récupération de la valeur de la case action    
couleur = Selection.Interior.ColorIndex     'Récupération de la couleur de la case action    
semaine = Selection.Offset(0, 37).Value     'Récupération de la la valeur de la semaine à droite de la case action

'sélection de la feuille du planning (Plan2)
Sheets("Plan2").Select

'sélection de la première date    
Cells(5, 1).Select
    
'recherche de la semaine sur la Feuil7 de la colonne correspondante ou non trouvée
Do Until Selection.Value = semaine Or Selection.Value = ""
Selection.Offset(0, 1).Select
Loop
    
'Recherche de la première ligne vide    
Do
Selection.Offset(1, 0).Select
Loop Until Selection.Value = ""
    
'copie de la valeur et de la couleur    
Selection.Value = Action
Selection.Interior.ColorIndex = couleur
        
'sélection de la première date    
Cells(5, 1).Select
    
'sélection de la feuille des données de départ (Feuil5) 
Sheets("Plan_Proto").Select
Loop

'sélection de la feuille du planning (Feuil7)'pour visualiser le planning
Sheets("Plan2").Select

'Activer la mise à jour de l'écran
Application.ScreenUpdating = True

End Sub
En vous remerciant d'avance pour votre aide,

Cordialement.
Fichiers attachés
Type de fichier : xls Exemple type.xls (29,0 Ko, 2 affichages)
Chalafraiz est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 04/01/2012, 10h44   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
J'espère que ce n'est pas un professeur d'informatique qui t'a donné ça ! Comme on le dit souvent, l'utilisation des Select dans tous les sens à est proscrire.

Pour ton problème, je suis très étonné de la ligne sur laquelle est ton erreur. Ou alors "Plan_Proto" est un onglet Graphique et non Feuille ?
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2012, 11h10   #3
 
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 4
Points : -1
Points : -1
Merci pour votre réponse.
C'est un prof polyvalent..

Citation:
Pour ton problème, je suis très étonné de la ligne sur laquelle est ton erreur. Ou alors "Plan_Proto" est un onglet Graphique et non Feuille ?
Eh bien en fait cette ligne s'active, c'est juste après en appuyant sur F8 que l'erreur s'affiche (je ne sais pas si c'est comme ça que vous l'avez compris ou pas). Sinon, Plan_Proto est bien une feuille.

Comment feriez-vous pour réaliser la même chose que montre le fichier "Exemple Type" sans utiliser Select ? Et comment expliquer que sa macro marche sur cet exemple et pas dans mon fichier ?

Franchement, je suis paumée, j'ai jamais été douée en code, mais avec mon fichier de plus de 100 lignes à classer, qui sont souvent modifiées, j'avoue que VBA s'impose..
Chalafraiz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 12h05   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Voici un code un peu plus propre sur l'exemple de ton prof. Pour ton problème à toi, il faudrait plus de détails sur la façon dont tu l'as adapté pour t'aider.

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
Sub Planning()
'
'Le raccourci de cette macro est CTRL+MAJ+P
'
Dim Produit As Variant      'Permet de stocker la valeur de l'action
Dim semaine As Integer      'Permet de stocker la date de l'action (si ce n'est pas un entier, il faut changer de type)
Dim couleur As Variant      'Permet de stocker la couleur de l'action
 
Dim F1, F2 As Worksheet     'Les feuilles 1 et 2
Dim iLigne As Integer       'Compteur de ligne
Dim rgSemaine As Range      'Cellule correspondant à la date
Dim rgFinColonne As Range   'Nouvelle ligne d'une semaine
 
Set F1 = Worksheets("Feuil1")
Set F2 = Worksheets("Feuil2")
 
'Désactiver la mise à jour de l'écran
Application.ScreenUpdating = False
 
'suppression des données de Feuil2
F2.Rows("2:1000").Delete 'les lignes 2 à 1000 sont supprimées (augmenter si nécessaire)
 
iLigne = 2
 
'Parcourir toute la liste des actions jusqu'à arriver à une case vide (normalement fin de la liste)
Do While F1.Cells(iLigne, 1).Value <> ""
    'récupération des informations de l'action
    Produit = F1.Cells(iLigne, 1).Value                  'Récupération de la valeur de la case action
    couleur = F1.Cells(iLigne, 1).Interior.ColorIndex    'Récupération de la couleur de la case action
    semaine = F1.Cells(iLigne, 1).Offset(0, 1).Value     'Récupération de la la valeur de la semaine à droite de la cas action
 
    'recherche de la colonne correspondant à la date
    Set rgSemaine = F2.Range("1:1").Find(semaine)
 
    If Not rgSemaine Is Nothing Then
        'recherche de la première ligne non vide
        If rgSemaine.Offset(1, 0).Value = "" Then
            Set rgFinColonne = rgSemaine.Offset(1, 0)
        Else
            Set rgFinColonne = rgSemaine.End(xlDown).Offset(1, 0)
        End If
 
        'copie de la valeur et de la couleur
        rgFinColonne.Value = Produit
        rgFinColonne.Interior.ColorIndex = couleur
    End If
 
    iLigne = iLigne + 1
Loop
 
'visualisation du planning
F2.Activate
 
'Activer la mise à jour de l'écran
Application.ScreenUpdating = True
 
End Sub
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 04/01/2012, 15h06   #5
 
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 4
Points : -1
Points : -1
Je vous remercie pour le temps que vous avez passé à essayer de m'aider !

Je n'arrive pas à comprendre pourquoi je n'arrive pas à adapter votre macro à mon fichier. Même en réduisant mon fichier au même "format" que l'Exemple_Type (en plaçant les données aux mêmes emplacement, c'est à dire la semaine à droite de la cellule Produit en F1, le "calendrier" au départ de la cellule A1 en F2, etc...)

Je vous joint dans ce message mon fichier (que j'ai du bien évidemment modifier), avec mes données, pour que vous puissiez m'expliquer pourquoi votre macro ne s'adapte pas dessus. (Par ailleurs, quand je copie mes données dans le fichier "Exemple Type", bien évidemment, ça marche !)
Fichiers attachés
Type de fichier : xls Test Autre Fichier.xls (54,0 Ko, 2 affichages)
Chalafraiz est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 04/01/2012, 15h44   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
C'était parce que ton planning n'était pas en dur. Remplace
Code :
Set rgSemaine = F2.Range("1:1").Find(semaine)
par
Code :
Set rgSemaine = F2.Range("1:1").Find(what:=semaine, LookIn:=xlValues)
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/01/2012, 08h50   #7
 
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 4
Points : -1
Points : -1
Je vous remercie, c'est parfait !

Bonne journée à vous
Chalafraiz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 09h40   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
N'oublie pas de mettre le poste en résolu, et éventuellement de voter...
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup 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 06h27.


 
 
 
 
Partenaires

Hébergement Web