|
Publicité | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Date d'inscription: février 2010
Messages: 36
|
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. |
|
|
|
|
|
#2 |
|
Nouveau membre du Club
![]() Date d'inscription: avril 2007
Messages: 72
|
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 |
|
|
|
|
|
#3 |
|
Futur Membre du Club
![]() Date d'inscription: février 2010
Messages: 36
|
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]. |
|
|
|
|
|
#4 |
|
Nouveau membre du Club
![]() Date d'inscription: avril 2007
Messages: 72
|
il faut le mettre ton code dans :feuille1("ton nom de feuille") au lieu de thisworkbook et ca devrai fonctionner
|
|
|
|
|
|
#5 |
|
Futur Membre du Club
![]() Date d'inscription: février 2010
Messages: 36
|
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... |
|
|
|
|
|
#6 |
|
Nouveau membre du Club
![]() Date d'inscription: avril 2007
Messages: 72
|
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 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 |
|
|
|
|
|
#7 |
|
Futur Membre du Club
![]() Date d'inscription: février 2010
Messages: 36
|
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 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]. |
|
|
|
|
|
#8 |
![]() Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
|
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 Code :
If Cells(i, 1) = Cells(j, 1) And Cells(i, 2) = Cells(j, 2) Then Code :
If Cells(i, 1) = Cells(j, 2) Then
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.
|
|
|
|
|
|
#9 |
|
Nouveau membre du Club
![]() Date d'inscription: avril 2007
Messages: 72
|
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 |
|
|
|
|
|
#10 |
|
Futur Membre du Club
![]() Date d'inscription: février 2010
Messages: 36
|
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. |
|
|
|
|
|
#11 |
![]() Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
|
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.
|
|
|
|
|
|
#12 |
|
Futur Membre du Club
![]() Date d'inscription: février 2010
Messages: 36
|
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 |
|
|
|
|
|
#13 |
![]() Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
|
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.
|
|
|
|
|
|
#14 |
|
Futur Membre du Club
![]() Date d'inscription: février 2010
Messages: 36
|
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 Quand je dit que la page s'ouvre je parle bien du formulaire. C'est une feuille de ce style. Dernière modification par goby45 ; 04/02/2010 à 16h35. |
|
|
|
|
|
#15 |
![]() Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
|
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.
|
|
|
|
|
|
#16 |
![]() Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
|
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
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.
|
|
|
|
|
|
#17 |
|
Futur Membre du Club
![]() Date d'inscription: février 2010
Messages: 36
|
Merci beaucoup ça marche !!!!!
![]() Encore un sujet résolu ! |
|
|
|
|
|
#18 |
|
Futur Membre du Club
![]() Date d'inscription: février 2010
Messages: 36
|
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 |
|
|
|
|
|
#19 |
![]() Nom : Jacques THERY
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 65
Messages: 2 350
|
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
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.
|
|
|
|
|
|
#20 |
|
Futur Membre du Club
![]() Date d'inscription: février 2010
Messages: 36
|
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 ? |
|
|
|
|
|
![]() |
||
Ouverture d'un UserForm sous conditions sur la feuille excel
|
||
| Outils de la discussion | |
|
|