End if, lors de fin de macro
Résolu/Fermé
Philou73CH
-
26 mars 2014 à 11:04
sipherion Messages postés 1798 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 - 26 mars 2014 à 15:58
sipherion Messages postés 1798 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 - 26 mars 2014 à 15:58
A voir également:
- End if, lors de fin de macro
- Macro word - Guide
- Macro logiciel - Télécharger - Organisation
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro recorder - Télécharger - Confidentialité
- Fin de tache explorateur windows ✓ - Forum Windows
3 réponses
sipherion
Messages postés
1798
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
19 décembre 2016
285
26 mars 2014 à 11:12
26 mars 2014 à 11:12
Bonjour,
Oui, toute instruction de type
Sera équivalent à
Dans ce deuxième code, il n'y a pas d'instruction End If car elle est sous entendue dans la ligne.
Pour reprendre ton code :
Cette instruction crée une boucle qui va exécuter tout le code qui va suivre autant de fois que n aille de 50 à 2, soit 49 fois.
Ton If possède son End If sous entendu, il n'est pas besoin d'en rajouter un ici.
On passe à la step suivante de n, c'est à dire n-1.
Sauf si tu as une ligne de code précédente qui commence par
Oui, toute instruction de type
If... Thendoit contenir un
End If, sauf un seul cas particulier, à éviter pour question de lisibilité, quand on passe les instructions sur la même ligne. Je m'explique.
If x = 1 Then
y = 2
End If
Sera équivalent à
If x = 1 Then y = 2
Dans ce deuxième code, il n'y a pas d'instruction End If car elle est sous entendue dans la ligne.
Pour reprendre ton code :
For n = 50 To 2 Step -1
Cette instruction crée une boucle qui va exécuter tout le code qui va suivre autant de fois que n aille de 50 à 2, soit 49 fois.
If Range("A" & n) <> Range("A1") Then Rows(n).Delete
Ton If possède son End If sous entendu, il n'est pas besoin d'en rajouter un ici.
Next n
On passe à la step suivante de n, c'est à dire n-1.
End With
Sauf si tu as une ligne de code précédente qui commence par
Withtu dois supprimer ce morceau.
sipherion
Messages postés
1798
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
19 décembre 2016
285
26 mars 2014 à 12:23
26 mars 2014 à 12:23
Ce code fonctionne chez moi :
Je ne vois pas à quoi sert le Unload Me, c'est ce qui me faisait planter chez moi, je l'ai donc commenté. J'ai simplifié un peu le code aussi.
Vérifie si ça tourne comme ça.
Private Sub ListBox1_Change()
Sheets("TT").Activate
Range("A6") = ListBox1.Text
'Enlever les autres noms
For n = 70 To 8 Step -1
If Range("A" & n) <> Range("A6") Then Rows(n).Delete
Next n
'Exporter dans tableau caché dans fax N-Q
Sheets("FAX").Activate
Sheets("FAX").Range("P7").FormulaR1C1 = "=TT!R[1]C[-14]"
Sheets("FAX").Range("Q7").FormulaR1C1 = "=TT!R[1]C[-14]"
Sheets("FAX").Range("R7").FormulaR1C1 = "=TT!R[1]C[-13]"
'Unload Me
'Contrôle compatibilité avec fonction
If Range("B11").Value < "22" Then
MsgBox ("Attention, la personne inscrite n'a pas le code adéquat")
UserForm6.Show
End If
UserForm8.Show
End Sub
Je ne vois pas à quoi sert le Unload Me, c'est ce qui me faisait planter chez moi, je l'ai donc commenté. J'ai simplifié un peu le code aussi.
Vérifie si ça tourne comme ça.
Merci, pour vos simplifications.
Par contre le problème reste. J'ai compris qu'il se déclanche quand il y a utilisation de la boucle Contrôle de la fonction. Je ne comprends pas pourquoi la macro, une fois fini, retourne sur tout les End Sub et quelques End If. 99% ne pose pas de problème, mais celui qui est dans cette partie oui. Et ce que vous avez modifier ne change rien. Donc le soucis est ailleurs dans le programme. Du coup, j'ai bricolé, comme d'hab.
Je mets la condition que si la cellule qui sera après userForm 8 est vide ( J11), il est fait, sinon non. Voilà, c'est tiré par les cheveux, ca rajoute à la macro, mais grace à ce que vous avez enlevé, je suis au point mort ( :-)) )
Merci à vous, votre aide m'a été précieuse.
Private Sub ListBox1_Change()
Sheets("TT").Activate
Range("A6") = ListBox1.Text
'Enlever les autres noms
For n = 70 To 8 Step -1
If Range("A" & n) <> Range("A6") Then Rows(n).Delete
Next n
'Exporter dans tableau caché dans fax N-Q
Sheets("FAX").Activate
Sheets("FAX").Range("P7").FormulaR1C1 = "=TT!R[1]C[-14]"
Sheets("FAX").Range("Q7").FormulaR1C1 = "=TT!R[1]C[-14]"
Sheets("FAX").Range("R7").FormulaR1C1 = "=TT!R[1]C[-13]"
Unload UserForm7
'Contrôle compatibilité avec fonction
If Range("B11").Value < "22" Then
MsgBox ("Attention, la personne inscrite n'a pas le code adéquat") <- si celà est vrai, s'est là que le problème surgit
UserForm6.Show
End If
If Sheets("FAX").Range("J11").Value = "" Then
UserForm8.Show
End If
End Sub
Par contre le problème reste. J'ai compris qu'il se déclanche quand il y a utilisation de la boucle Contrôle de la fonction. Je ne comprends pas pourquoi la macro, une fois fini, retourne sur tout les End Sub et quelques End If. 99% ne pose pas de problème, mais celui qui est dans cette partie oui. Et ce que vous avez modifier ne change rien. Donc le soucis est ailleurs dans le programme. Du coup, j'ai bricolé, comme d'hab.
Je mets la condition que si la cellule qui sera après userForm 8 est vide ( J11), il est fait, sinon non. Voilà, c'est tiré par les cheveux, ca rajoute à la macro, mais grace à ce que vous avez enlevé, je suis au point mort ( :-)) )
Merci à vous, votre aide m'a été précieuse.
Private Sub ListBox1_Change()
Sheets("TT").Activate
Range("A6") = ListBox1.Text
'Enlever les autres noms
For n = 70 To 8 Step -1
If Range("A" & n) <> Range("A6") Then Rows(n).Delete
Next n
'Exporter dans tableau caché dans fax N-Q
Sheets("FAX").Activate
Sheets("FAX").Range("P7").FormulaR1C1 = "=TT!R[1]C[-14]"
Sheets("FAX").Range("Q7").FormulaR1C1 = "=TT!R[1]C[-14]"
Sheets("FAX").Range("R7").FormulaR1C1 = "=TT!R[1]C[-13]"
Unload UserForm7
'Contrôle compatibilité avec fonction
If Range("B11").Value < "22" Then
MsgBox ("Attention, la personne inscrite n'a pas le code adéquat") <- si celà est vrai, s'est là que le problème surgit
UserForm6.Show
End If
If Sheets("FAX").Range("J11").Value = "" Then
UserForm8.Show
End If
End Sub
sipherion
Messages postés
1798
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
19 décembre 2016
285
26 mars 2014 à 14:50
26 mars 2014 à 14:50
Sinon tu peux toujours essayer de m'envoyer le fichier histoire que je puisse tester avec les UserForm, comme je ne les ai pas chez moi j'ai du les supprimer. Si le problème vient de là, ça expliquerait pourquoi ça fonctionne chez moi et pas chez toi.
Je te remercie de ton aimable proposition. La solution que j'ai trouvé fonctionne. Je n'ai pas compris le pourquoi du comment, mais à défaut de soigner la maladie j'ai enlever les symptômes.
Pour moi ce projet est clot puisque fonctionnel en l'état. Je vais donc passer à autre chose et ne pas te faire perdre ton temps inutilement.
Recois mes meilleures salutations et encore merci pour le temps que tu as pris pour me répondre.
Pour moi ce projet est clot puisque fonctionnel en l'état. Je vais donc passer à autre chose et ne pas te faire perdre ton temps inutilement.
Recois mes meilleures salutations et encore merci pour le temps que tu as pris pour me répondre.
sipherion
Messages postés
1798
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
19 décembre 2016
285
26 mars 2014 à 15:58
26 mars 2014 à 15:58
Ravis d'avoir pu aider. N'oublie pas de passer cette conversation comme Résolue =)
26 mars 2014 à 11:16
26 mars 2014 à 12:02
J'ai visiblement pas copier / coller depuis la bonne place pour que vous puissiez analyser la partie de la macro et je m'en excuse.
Voici donc en rectification ( Même si c'est pas la même partie de la macro c'est la même fonction)
With Worksheets("TT")
.Range("A24") = ListBox1.Text
'Enlever les autres noms
For n = 150 To 26 Step -1
If Range("A" & n) <> Range("A24") Then Rows(n).Delete
Next n
End With
Le but de mon If est d'avoir un double contrôle c'est à dire déliminer les noms qui ne correspondent pas à celui choisi par l'utilisateur et qui est inscrit dans "A24". Pour moi cela fonctionne quand je test le programme. Par contre pour vous est-ce bien par cette partie du programme ?
Par contre, avez-vous une idée comment je peux déplacer ou enlever le End If qui me pose problème. Vous trouverez ci-dessous une partie de la macro incriminée.
Private Sub ListBox1_Change()
With Worksheets("TT")
.Range("A6") = ListBox1.Text
'Enlever les autres noms
For n = 70 To 8 Step -1
If Range("A" & n) <> Range("A6") Then Rows(n).Delete
Next n
End With
'Exporter dans tableau caché dans fax N-Q
Sheets("FAX").Activate
Range("P7").Select
ActiveCell.FormulaR1C1 = "=TT!R[1]C[-14]"
Range("Q7").Select
ActiveCell.FormulaR1C1 = "=TT!R[1]C[-14]"
Range("R7").Select
ActiveCell.FormulaR1C1 = "=TT!R[1]C[-13]"
Unload Me
'Contrôle compatibilité avec fonction
If Range("B11").Value < "22" Then
MsgBox ("Attention, la personne inscrite n'a pas le code adéquat")
UserForm6.Show
End If <-- C'est celui-ci qui me pose soucie
UserForm8.Show
End Sub
Merci à vous d'avoir pris du temps pour moi.