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
Futur Membre du Club
 
Date d'inscription: février 2010
Messages: 36
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
Vieux 04/02/2010, 12h18   #2
Nouveau membre du Club
 
Date d'inscription: avril 2007
Messages: 72
Par défaut

oui c'est possible
tu va dans les macro associé a ta feuille ensuite tu tape le code suivant :
Code :
 
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
Vieux 04/02/2010, 14h26   #3
Futur Membre du Club
 
Date d'inscription: février 2010
Messages: 36
Par défaut

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 :
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
Vieux 04/02/2010, 14h35   #4
Nouveau membre du Club
 
Date d'inscription: avril 2007
Messages: 72
Par défaut

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
Vieux 04/02/2010, 14h54   #5
Futur Membre du Club
 
Date d'inscription: février 2010
Messages: 36
Par défaut

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
Vieux 04/02/2010, 15h03   #6
Nouveau membre du Club
 
Date d'inscription: avril 2007
Messages: 72
Par défaut

Code :
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 :
 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
Vieux 04/02/2010, 15h20   #7
Futur Membre du Club
 
Date d'inscription: février 2010
Messages: 36
Par défaut

Ca ne fonctionne toujours pas... rien ne se passe

Pour le code :

Code :
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
Vieux 04/02/2010, 15h43   #8
Rédacteur/Modérateur
 
Avatar de jacques_jean
 
Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
Par défaut

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 :
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
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/02/2010, 15h56   #9
Nouveau membre du Club
 
Date d'inscription: avril 2007
Messages: 72
Par défaut

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
Vieux 04/02/2010, 16h00   #10
Futur Membre du Club
 
Date d'inscription: février 2010
Messages: 36
Par défaut

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
Vieux 04/02/2010, 16h02   #11
Rédacteur/Modérateur
 
Avatar de jacques_jean
 
Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
Par défaut

Avez-vous fait un essai en modifiant l'ordre "ligne/colonne" comme je vous l'ai indiqué ?
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/02/2010, 16h14   #12
Futur Membre du Club
 
Date d'inscription: février 2010
Messages: 36
Par défaut

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
Vieux 04/02/2010, 16h18   #13
Rédacteur/Modérateur
 
Avatar de jacques_jean
 
Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
Par défaut

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" ?
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/02/2010, 16h18   #14
Futur Membre du Club
 
Date d'inscription: février 2010
Messages: 36
Par défaut

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 :
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
Vieux 04/02/2010, 16h42   #15
Rédacteur/Modérateur
 
Avatar de jacques_jean
 
Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
Par défaut

Quelques précisions avant d'ouvrir votre fichier et de tester :

Code :
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 :
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 
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/02/2010, 16h52   #16
Rédacteur/Modérateur
 
Avatar de jacques_jean
 
Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
Par défaut

Je viens de tester ce code :

Code :
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.
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/02/2010, 17h45   #17
Futur Membre du Club
 
Date d'inscription: février 2010
Messages: 36
Par défaut

Merci beaucoup ça marche !!!!!

Encore un sujet résolu !
goby45 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/02/2010, 14h36   #18
Futur Membre du Club
 
Date d'inscription: février 2010
Messages: 36
Par défaut

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 :
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
Vieux 09/02/2010, 15h59   #19
Rédacteur/Modérateur
 
Avatar de jacques_jean
 
Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
Par défaut

Bonjour,

A essayer :

Code :
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" ?
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/02/2010, 16h18   #20
Futur Membre du Club
 
Date d'inscription: février 2010
Messages: 36
Par défaut

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
NEWS EXCELF.A.Q EXCELTUTORIELS EXCELSOURCES EXCELOUTILS EXCELLIVRES EXCELOFFICE 2010

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 00h48.


Vos questions techniques : forum d'entraide Excel - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.