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/02/2010, 11h08   #1
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 37
Points : 12
Points : 12
Par défaut Ouverture d'un UserForm sous conditions sur la feuille excel

Bonjour,
Je voudrais savoir s'il est possible qu'un userform s'ouvre sous condition sur la feuille excel.
Je m'explique:
Je veux que mon userform s'ouvre si pour deux ligne, les valeurs des colonnes A et B sont identiques.

Merci de votre aide.
goby45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 12h18   #2
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
oui c'est possible
tu va dans les macro associé a ta feuille ensuite tu tape le code suivant :
Code :
1
2
3
4
 
Private Sub Worksheet_Change(ByVal Target As Range)
et tu met ta condition ici sur les cellules ou colonnes 
End Sub
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 14h26   #3
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 37
Points : 12
Points : 12
Merci pour ton aide imaril.
Cependant, je n'arrive pas à obtenir ce que je veux.
Si j'ai bien compris, j'ai utilisé ton code dans le code de "ThisWorkBook"

Voila ce que j'ai ecrit:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Worksheet_Change(ByVal Target As Range)
 
Dim i As Long
Dim j As Long
Dim lastrow As Long
 
lastrow = ThisWorkbook.Worksheets(1).Range("A65536").End(xlUp).Row
    For i = 1 To lastrow
        For j = i To lastrow
    If Cells(1, i) = Cells(1, j) And Cells(2, i) = Cells(2, j) Then UserForm.Show
        Next j
    Next i
    Else
 
End Sub

Mais ça ne fonctionne pas lorsque je saisi les mêmes valeurs pour les colonnes A et B sur 2 lignes différentes rien ne se passe ...

Dernière modification par jacques_jean ; 04/02/2010 à 15h28. Motif: Ajout balises [CODE].
goby45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 14h35   #4
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
il faut le mettre ton code dans :feuille1("ton nom de feuille") au lieu de thisworkbook et ca devrai fonctionner
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 14h54   #5
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 37
Points : 12
Points : 12
oui je me suis rendu compte qu'il fallait le mettre dans "feuil1" mais ça ne marche toujours pas...

En fait avec ce code la fenetre apparait a chaque modification de la feuille excel...normal vu que pour i=1 et j=1 je compare la cellule avec elle même!

J'ai donc modifié la 7eme ligne de code avec :
for j=i+1 to lastrow

Mais là plus rien ne se passe (en créant le doublon ) , je ne comprend pas...
goby45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 15h03   #6
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim j As Long
Dim lastrow As Long
If Target.Column = 1 Or Target.Column = 2 Then
    lastrow = ThisWorkbook.Worksheets(1).Range("A65536").End(xlUp).Row
    For i = 1 To lastrow
        For j = i To lastrow
            If Cells(1, i) = Cells(1, j) And Cells(2, i) = Cells(2, j) Then UserForm.Show
        Next j
    Next i
End If
End Sub
ca devrai fonctionner

mais je comprend pas vraiment pourquoi tu met :
Code :
1
2
3
4
5
 For i = 1 To lastrow
        For j = i To lastrow
            If Cells(1, i) = Cells(1, j) And Cells(2, i) = Cells(2, j) Then UserForm.Show
        Next j
    Next i
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 15h20   #7
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 37
Points : 12
Points : 12
Ca ne fonctionne toujours pas... rien ne se passe

Pour le code :

Code :
1
2
3
4
5
For i = 1 To lastrow
        For j = i To lastrow
            If Cells(1, i) = Cells(1, j) And Cells(2, i) = Cells(2, j) Then UserForm.Show
        Next j
    Next i
Je souhaite comparer les 2 premières colonnes de chaque ligne avec celles toutes les autres donc j'ai fait 2 boucles for imbriquées : la première (avec le i) pour prendre la première cellule,puis la suivante,... et la comparer avec les autres (boucle avec j).
C'est pas une bonne solution ?

Je sais pas si je suis très clair...

Dernière modification par jacques_jean ; 04/02/2010 à 15h29. Motif: Ajout balises [CODE].
goby45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 15h43   #8
Expert Confirmé Sénior
 
Avatar de jacques_jean
 
Homme Jacques THERY
CBPDI(Congés Bien Payés/Durée Indéterminée)
Inscription : janvier 2006
Messages : 2 958
Détails du profil
Informations personnelles :
Nom : Homme Jacques THERY
Âge : 67
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : CBPDI(Congés Bien Payés/Durée Indéterminée)

Informations forums :
Inscription : janvier 2006
Messages : 2 958
Points : 4 997
Points : 4 997
Bonjour,

Si j'ai bien compris, vous voulez comparer la 1re cellule de la colonne "A" avec toutes les valeurs de la colonne "B", puis le 2me cellule de la colonne "A" avec toutes les cellules de la colonne "B" etc. ?

Mais déjà et avant tout, il faut inverser les données après "Cells(
-la première correspond à la ligne et la seconde à la colonne soit :

Code :
1
2
3
4
5
For i = 1 To lastrow
        For j = i To lastrow
            If Cells(i, 1) = Cells(j, 1) And Cells(i, 2) = Cells(j, 2) Then UserForm.Show
        Next j
    Next i
Cela dit, je ne comprends quand même par pourquoi :

Code :
If Cells(i, 1) = Cells(j, 1) And Cells(i, 2) = Cells(j, 2) Then
ne serait-ce pas :

Code :
If Cells(i, 1) = Cells(j, 2) Then
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 15h56   #9
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
c'est pas faux...

ps: n'oublie pas de mettre le If au début sinon il fera le test pour chacune des cellules modifiés
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 16h00   #10
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 37
Points : 12
Points : 12
Non la comparaison se fait bien sur les lignes, mais avec conditions sur les 2 premières colonnes.

Exemple:
Si A1=A2 ET B1=B2 alors on ouvre la fenetre.

Mais je pense c'est bien dans cette ligne de code que se situe le problème.
goby45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 16h02   #11
Expert Confirmé Sénior
 
Avatar de jacques_jean
 
Homme Jacques THERY
CBPDI(Congés Bien Payés/Durée Indéterminée)
Inscription : janvier 2006
Messages : 2 958
Détails du profil
Informations personnelles :
Nom : Homme Jacques THERY
Âge : 67
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : CBPDI(Congés Bien Payés/Durée Indéterminée)

Informations forums :
Inscription : janvier 2006
Messages : 2 958
Points : 4 997
Points : 4 997
Avez-vous fait un essai en modifiant l'ordre "ligne/colonne" comme je vous l'ai indiqué ?
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 16h14   #12
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 37
Points : 12
Points : 12
Oui, et il y avait bien erreur de ma part pour inverser les lignes et colonnes

Maintenant, a chaque nouvelle saisie, la page s'affiche, avec ou sans doublon
goby45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 16h18   #13
Expert Confirmé Sénior
 
Avatar de jacques_jean
 
Homme Jacques THERY
CBPDI(Congés Bien Payés/Durée Indéterminée)
Inscription : janvier 2006
Messages : 2 958
Détails du profil
Informations personnelles :
Nom : Homme Jacques THERY
Âge : 67
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : CBPDI(Congés Bien Payés/Durée Indéterminée)

Informations forums :
Inscription : janvier 2006
Messages : 2 958
Points : 4 997
Points : 4 997
Quand vous écrivez "la page s'affiche", je suppose qu'il s'agit du formulaire ?

Pouvez-vous joindre un exemple de quelques lignes de données dans vous colonnes "A" et "B" ?
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 16h18   #14
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 37
Points : 12
Points : 12
A noter que les cellules de toute la colonne A et toute la colonne B sont fusionnées 4 par 4 a partir de la ligne 2.
Je sais pas si ça change quelque chose...

J'ai essayé:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim j As Long
Dim lastrow As Long
If Target.Column = 1 Or Target.Column = 2 Then
    lastrow = ThisWorkbook.Worksheets(1).Range("A65536").End(xlUp).Row
    For i = 2 To lastrow - 3 Step 4
        For j = i + 4 To lastrow - 3 Step 4
            If Cells(i, 1) = Cells(j, 1) And Cells(i, 2) = Cells(j, 2) Then UserForm2.Show
        Next j
    Next i
End If
End Sub
mais ca ne fonctionne pas
Quand je dit que la page s'ouvre je parle bien du formulaire.


C'est une feuille de ce style.
Fichiers attachés
Type de fichier : xls page.xls (16,5 Ko, 4 affichages)

Dernière modification par goby45 ; 04/02/2010 à 16h35.
goby45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 16h42   #15
Expert Confirmé Sénior
 
Avatar de jacques_jean
 
Homme Jacques THERY
CBPDI(Congés Bien Payés/Durée Indéterminée)
Inscription : janvier 2006
Messages : 2 958
Détails du profil
Informations personnelles :
Nom : Homme Jacques THERY
Âge : 67
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : CBPDI(Congés Bien Payés/Durée Indéterminée)

Informations forums :
Inscription : janvier 2006
Messages : 2 958
Points : 4 997
Points : 4 997
Quelques précisions avant d'ouvrir votre fichier et de tester :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim j As Long
Dim lastrow As Long
If Target.Column = 1 Or Target.Column = 2 Then
    lastrow = ThisWorkbook.Worksheets(1).Range("A65536").End(xlUp).Row
    For i = 2 To lastrow - 3 Step 4
        For j = i + 4 To lastrow - 3 Step 4
            If Cells(i, 1) = Cells(j, 1) And Cells(i, 2) = Cells(j, 2) Then UserForm2.Show
        Next j
    Next i
End If
End Sub


Code :
1
2
For i = 2 To lastrow - 3 Step 4 'il ne faut pas indiquer  - 3, lastrow va renvoyer la valeur de la 1re ligne de l'ensemble des 4 dernières lignes.
For j = i + 4 To lastrow - 3 Step 4 'idem ci-dessus
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 16h52   #16
Expert Confirmé Sénior
 
Avatar de jacques_jean
 
Homme Jacques THERY
CBPDI(Congés Bien Payés/Durée Indéterminée)
Inscription : janvier 2006
Messages : 2 958
Détails du profil
Informations personnelles :
Nom : Homme Jacques THERY
Âge : 67
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : CBPDI(Congés Bien Payés/Durée Indéterminée)

Informations forums :
Inscription : janvier 2006
Messages : 2 958
Points : 4 997
Points : 4 997
Je viens de tester ce code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim j As Long
Dim lastrow As Long
If Target.Column = 1 Or Target.Column = 2 Then
    lastrow = ThisWorkbook.Worksheets(1).Range("A65536").End(xlUp).Row
    For i = 2 To lastrow Step 4
        For j = i + 4 To lastrow Step 4
            If Cells(i, 1) = Cells(j, 1) And Cells(i, 2) = Cells(j, 2) Then UserForm2.Show
        Next j
    Next i
End If
End Sub
et, à priori, par rapport à ce que vous demandez pour l'instant, il fonctionne.
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 17h45   #17
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 37
Points : 12
Points : 12
Merci beaucoup ça marche !!!!!

Encore un sujet résolu !
goby45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 14h36   #18
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 37
Points : 12
Points : 12
Bonjour,

Il me vient un autre problème avec ce code :

Lorsqu'il y a plusieurs doublons, le userform s'ouvre plusieurs fois, ce que je ne souhaite pas.
J'essaie de mettre un exit for mais ça ne fonctionne pas.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim j As Long
Dim lastrow As Long
If Target.Column = 1 Or Target.Column = 2 Then
    lastrow = ThisWorkbook.Worksheets(1).Range("A65536").End(xlUp).Row
    For i = 2 To lastrow Step 4
        For j = i + 4 To lastrow Step 4
            If Cells(i, 1) = Cells(j, 1) And Cells(i, 2) = Cells(j, 2) Then 
        Exit For
        Exit For
        UserForm2.Show
        Else:
        Next j
    Next i
End If
End Sub
goby45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 15h59   #19
Expert Confirmé Sénior
 
Avatar de jacques_jean
 
Homme Jacques THERY
CBPDI(Congés Bien Payés/Durée Indéterminée)
Inscription : janvier 2006
Messages : 2 958
Détails du profil
Informations personnelles :
Nom : Homme Jacques THERY
Âge : 67
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : CBPDI(Congés Bien Payés/Durée Indéterminée)

Informations forums :
Inscription : janvier 2006
Messages : 2 958
Points : 4 997
Points : 4 997
Bonjour,

A essayer :

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
Sub Worksheet_Change(ByVal Target As Range)
Dim valpre1, valpre2 'j'ai laissé les variables en type "Variant" car je ne sais 'pas quel type de données vous traitez.
Dim i As Long
Dim j As Long
Dim lastrow As Long
If Target.Column = 1 Or Target.Column = 2 Then
    lastrow = ThisWorkbook.Worksheets(1).Range("A65536").End(xlUp).Row
    For i = 2 To lastrow Step 4
    valpre1 = ""
    valpre2 = ""
        For j = i + 4 To lastrow Step 4
            If Cells(j, 1) = valpre1 And Cells(j, 2) = valpre2 Then
            Exit For
            ElseIf Cells(i, 1) = Cells(j, 1) And Cells(i, 2) = Cells(j, 2) Then
            UserForm2.Show
            valpre1 = Cells(j, 1)
            valpre2 = Cells(j, 2)
            Else
            valpre1 = ""
            valpre2 = ""
            End If
        Next j
    Next i
End If
End Sub
Ici on ne termine que la boucle "j" car j'ai supposé que vous vouliez continuer la boucle "i" ?
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 16h18   #20
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 37
Points : 12
Points : 12
En fait, je cherche à arrêter la procédure (toutes les boucles) dès que mon userform apparait.

Il n'y aurait pas une instruction simple comme en C genre break ?
goby45 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 +1. Il est actuellement 20h01.


 
 
 
 
Partenaires

Hébergement Web