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 12/11/2011, 09h08   #1
Membre à l'essai
 
Étudiant
Inscription : décembre 2008
Messages : 45
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2008
Messages : 45
Points : 20
Points : 20
Par défaut RefEdit sur plusieurs classeurs

Bonjour,

Petit problème du weekend faire un petit programme de comparaison de valeur.
Pour cela.
Faire une macro qui lance une userform avec deux champs (en théorie des refedit).
Ceci est la base pour ensuite comparer le contenu des deux sélections afin de connaitre les valeurs manquantes dans chacune des sélections par une coloration de la cellule.

Concernant la deuxième partie, je ne pense pas avoir de problème ...
Mais ce matin en utilisant le refedit, je remarque qu'il n'est pas possible de changer de classeur lors de la sélection des cellules.

Avez-vous une idée ?
Merci
remy67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 10h23   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Active le classeur sur lequel tu dois faire tes sélections avant d'utiliser le refedit.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 11h18   #3
Membre à l'essai
 
Étudiant
Inscription : décembre 2008
Messages : 45
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2008
Messages : 45
Points : 20
Points : 20
Merci pour ta réponse, mais tout l’intérêt du système est de pouvoir comparer deux zones qui peuvent être dans le même classeur mais aussi dans d'autres classeurs.
Peut-etre que le refedit n'est simplement pas adapté, mais je ne vois pas quelle autre solution prendre.
remy67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 12h17   #4
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Si le problème est de récupérer deux plages, j'essaierais sans userform :


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
Sub test()
    Dim Rep As String, Plage1 As Range, Plage2 As Range, Fich As String
    Dim wb1 As Workbook, wb2 As Workbook
    Rep = MsgBox("Voulez-vous choisir la première plage dans un autre classeur ?", vbYesNo)
    If Rep = vbYes Then
        Fich = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*")
        Set wb1 = Workbooks.Open(Fich)
        Set Plage1 = Application.InputBox("Choisissez la plage", Type:=8)
    Else
        Set Plage1 = Application.InputBox("Choisissez la plage", Type:=8)
    End If
    Rep = MsgBox("Voulez-vous choisir la seconde plage dans un autre classeur ?", vbYesNo)
    ThisWorkbook.Activate
    If Rep = vbYes Then
        Fich = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*")
        Set wb2 = Workbooks.Open(Fich)
        Set Plage2 = Application.InputBox("Choisissez la plage", Type:=8)
    Else
        Set Plage2 = Application.InputBox("Choisissez la plage", Type:=8)
    End If
    'là, tu compares les deux plages
    If Not wb1 Is Nothing Then wb1.Close False
    If Not wb2 Is Nothing Then wb2.Close False
End Sub
Tu insères ton code là où j'ai mis un commentaire.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/11/2011, 12h37   #5
Membre à l'essai
 
Étudiant
Inscription : décembre 2008
Messages : 45
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2008
Messages : 45
Points : 20
Points : 20
Vraiment sympa d'avoir pris le temps de coder tout ça, Merci

Mais sur le principe, il n'y a rien de plus "léger" pour passer d'un classeur à un autre avec une userform ouverte ?

Sinon je vais adapter le code ça devrait fonctionner sans problème.
remy67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 18h19   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Pourquoi est-ce que tu tiens à ouvrir un userform ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 23h44   #7
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 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par remy67 Voir le message
...
Concernant la deuxième partie, je ne pense pas avoir de problème ...
Mais ce matin en utilisant le refedit, je remarque qu'il n'est pas possible de changer de classeur lors de la sélection des cellules.
...
je comprends pas tu peu mettre un refedit par classeur sur ton userform ..
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 19h05   #8
Membre à l'essai
 
Étudiant
Inscription : décembre 2008
Messages : 45
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2008
Messages : 45
Points : 20
Points : 20
Avec refedit je n'arrive pas à changer de classeur, or avec Application.InputBox je peux changer de classeur en passant par affichage.

Ci-joint mon code pour le moment il fonctionne si on est sur la même page.
Reste à ajouter les variables pour un autre classeur.
Je ne suis pas un pro de la programmation, je me débrouille comme je peux....

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
66
67
68
69
70
71
72
73
74
75
76
Sub comparaison_plage()
 
Dim plage1 As Range
Dim plage2 As Range
Dim feuilleplage1 As Variant
Dim feuilleplage2 As Variant
Dim Classeurplage1 As Variant
Dim Classeurplage2 As Variant
Dim cell As Variant
Dim cell1 As Variant
 
Set plage1 = Application.InputBox("Désigner la cellule supérieure gauche" & Chr(10) & "de la zone de destination", "Sélection", , , , , , 8)
        feuilleplage1 = plage1.Worksheet.Name
        Classeurplage1 = plage1.Worksheet.Parent.Name
 
Set plage2 = Application.InputBox("Désigner la cellule supérieure gauche" & Chr(10) & "de la zone de destination", "Sélection", , , , , , 8)
        feuilleplage2 = plage1.Worksheet.Name
        Classeurplage2 = plage1.Worksheet.Parent.Name
 
Valeur_deja_trouve_valeur = 0
 
For Each cell In plage1
    If cell.Value = Empty Then
    Else
        Valeur_compare_plage1 = cell.Value
        Valeur_deja_trouve_valeur = 0
            For Each cell1 In plage2
                    If Valeur_deja_trouve_valeur = 0 Then
                    Valeur_compare_plage2 = cell1.Value
                    cell1.Select
                            If Valeur_compare_plage2 = Valeur_compare_plage1 Then
                            i = Selection.Interior.ColorIndex
                                    If Selection.Interior.ColorIndex = 6 Then
                                    Else
                                    With Selection.Interior
                                    .Color = 65535
                                    End With
                                    Valeur_deja_trouve_valeur = 1
                                    End If
                            End If
 
                    End If
 
            Next
    End If
Next
 
 
For Each cell In plage2
    If cell.Value = Empty Then
    Else
    Valeur_compare_plage2 = cell.Value
    Valeur_deja_trouve_valeur = 0
 
        For Each cell1 In plage1
 
                If Valeur_deja_trouve_valeur = 0 Then
                Valeur_compare_plage1 = cell1.Value
                cell1.Select
                        If Valeur_compare_plage1 = Valeur_compare_plage2 Then
                        i = Selection.Interior.ColorIndex
 
                                If Selection.Interior.ColorIndex = 14 Then
                                Else
                                With Selection.Interior
                                .Color = 5287936
                                End With
                                Valeur_deja_trouve_valeur = 1
                                End If
                        End If
                End If
        Next
    End If
Next
 
End Sub
remy67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 09h17   #9
Membre à l'essai
 
Étudiant
Inscription : décembre 2008
Messages : 45
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2008
Messages : 45
Points : 20
Points : 20
Bonjour,
J'essaie de terminer pour petit programme.
Petit problème, quand je fais en changeant d'onglet

Code :
1
2
3
Set plage2 = Application.InputBox("Désigner la cellule supérieure gauche" & Chr(10) & "de la zone de destination", "Sélection", , , , , , 8)
        feuilleplage2 = plage1.Worksheet.Name
        Classeurplage2 = plage1.Worksheet.Parent.Name
Je n'ai pas l'onglet de la sélection, mais de l'onglet initial.
Comment est-il possible de faire pour connaitre quel onglet avait été sélectionné et éventuellement quel classeur.
Merci
remy67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 10h39   #10
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Code :
1
2
feuilleplage2 = plage2.Worksheet.Name
Classeurplage2 = plage2.Worksheet.Parent.Name
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/11/2011, 15h15   #11
Membre à l'essai
 
Étudiant
Inscription : décembre 2008
Messages : 45
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2008
Messages : 45
Points : 20
Points : 20
Put... le con que je suis.
Et j'en ai fait des tests dans tous les sens pour voir d'ou vient le pb ^^.

Merci en tout cas
remy67 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 06h54.


 
 
 
 
Partenaires

Hébergement Web