[AIDE] Macro commande de tri alphabétique

Fermé
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 - 18 juin 2008 à 09:36
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 - 19 juin 2008 à 11:00
Bonjour à tous

Je viens vous expliquer mon problème que je n'ai pas reussi à résoudre et j'éspère que vous allez pouvoir m'aider

J'ai un tableau que voila

1 Cote Date Saisie Initiales Saisies Titre Auteur Source Index .......
2 .................................................................. <= ceci est une ligne de vide pour délimiter mon tableau
3 5 02/06/2006 RL BlaBla AFNOR BlaBla
4 2 01/02/1998 RL BlaBla Nf BlaBla

etc etc ...

J'ai fais une macro commande qui tri à l'aide de boutons ( un pour chaque catégorie ) situés dans la première ligne qui marchait lorsque la ligne 2 "n'éxistait pas" c'est a dire qu'il n'y avait pas de délimitation ( ligne 2 de petits points ici )

Je n'arrive pas à modifier ma macro pour qu'elle prenne en compte cette nouvelle ligne que j'ai inséré et donc quand je clique sur le bouton de tri rien ne se passe

Sub MacroTriCote()
'
' MacroTriCote Macro
' Macro enregistrée le 30/05/2008 par IC
'

'
Application.Goto Reference:="Cote"
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A2").Select
Range("A3").Select
End Sub


Merci de votre aide et bonne journée
A voir également:

12 réponses

onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
18 juin 2008 à 09:50
Salut,

Application.Goto Reference:="Cote"

Ca signifie que tu as nommé le tableau à trier ?

Si tel est le cas alors redéfini ton "Cote" en prenant en compte ta ligne vide si "Cote" n'est pas utilisé ailleurs, sinon ajoute un "Cote2" à partir de A3.
0
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
18 juin 2008 à 11:41
Alors
tout d'abord merci de ton aide

Cote est une colonne de mon tableau
Mais le nom Cote dans le programme est en fait la case A1 que j'ai renommée

Que dois je faire??
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
18 juin 2008 à 11:52
Alors je ne comprends pas ton code :

Application.Goto Reference:="Cote" -> Cela sélectionne donc la cellule A1
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
-> Le tri se fait sur la sélection en cours (donc A1)

Que donne un débogage "Pas à pas détaillé" de ta procédure ?
0
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
18 juin 2008 à 12:20
Mais ce que je ne comprend pas c'est que cela marchait avant

Lorsque la ligne que j'ai rajoutée n'existait pas la macro commande de tri marchait

C'est une ligne vide de 3 pixels colorée en orange pour délimiter les titres de tableau ( cote date saisie auteur etc ) et lorsque celle ci n'était pas la la macro fonctionnait

Sinon aurais tu une autre macro qui pourrait m'aider dans mon problème ??

Je te poste mon fichier excel pour que tu comprennes mieux

https://www.cjoint.com/?gsmtB2PmqB fichier excel

Merci
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
18 juin 2008 à 12:33
Ton lien ne fonctionne pas : Ce lien n'est pas ou n'est plus disponible.

Si ton code fonctionnait avant tu peux alors rajouter les lignes en gras dans ton code :
Sub MacroTriCote()
    Rows(2).Delete
    Application.Goto Reference:="Cote"
    Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range("A2").Select
    Selection.EntireRow.Insert
    Rows(2).RowHeight = 2.25
    Rows(2).Interior.ColorIndex = 45
    Range("A3").Select
End Sub


Le premier rajout supprime la ligne 2

Ensuite ton tri s'execute

Le second rajout remet la ligne 2
Le troisième défini la hauteur de ligne
Le dernier défini la couleur

Qu'en penses-tu ?
0
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
18 juin 2008 à 12:58
ça marche je te remercie

http://www.files-save.com/download-8fc579391a3166e63d47c3115438f29e.html

Peux tu essayer de télécharger le fichier et me dire si ça marche
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
18 juin 2008 à 13:03
Le lien fonctionne
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
18 juin 2008 à 13:17
OK

J'aurais une autre question mais qui n'as pas de rapport avec le tri

Comme tu peux voir dans mon fichier j'ai deux onglets Saisie Contrat et Saisie Document
Je voudrais en fait que l'accès à ces onglets soit fait par mot de passe
C'est a dire que lorsque quelqu'un va cliquer sur l'onglet pour ajouter des nouveaux contrats ou document on lui demande un mot de passe
Sa evitera que des personnes mal intentionnées saisisse des nouveaux documents

Comment je pourrais faire ça??
Merci
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
18 juin 2008 à 13:52
Tu dépend du niveau de sécurité dont tu as besoin :

Ca peut-être ca :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    MdP_Contrat = "toto"
    MdP_Document = "tata"
    
    If Sh.Name = "Saisie Contrat" Then
        rep = InputBox("Saisissez le mot de passe")
        If rep = MdP_Contrat Then
            MsgBox "MdP Ok"
        Else
            MsgBox "Accès refusé !"
            Sheets(3).Select
        End If
    ElseIf Sh.Name = "Saisie Document" Then
        rep = InputBox("Saisissez le mot de passe")
        If rep = MdP_Document Then
            MsgBox "MdP Ok"
        Else
            MsgBox "Accès refusé !"
            Sheets(3).Select
        End If
    End If
End Sub


Ou bien un userform avec des zones de texte qui mettent des étoiles quand tu tapes le mot de passe, ou bien une protection de la feuille par mot de passe ...
0
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
18 juin 2008 à 14:04
Quelle est la meilleure securité et comment faire??
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
18 juin 2008 à 14:43
Si tu cherches réellement une bonne sécurité, je te conseille de faire un classeur séparé "Saisie Contrats", un classeur "Saisie Documents" et de mettre des droits au niveau fichier sur tes classeurs (Bouton droit sur le fichier, Propriétés, onglet sécurité).

De cette façon, seuls les utilisateurs déclarés pourront ouvrir ces fichiers sans autre mot de passe que celui d'ouverture de session Windows.
0
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
18 juin 2008 à 14:53
non je préférerais tout mettre dans le méme classeur
Comment avoir la meilleure securité en gardant un seul classeur
Je voudrais un truc avec mot de passe
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
18 juin 2008 à 15:09
Ben c'est toi qui voit ... sachant que les protections des fichiers excel et du code vba sont facile à faire tomber.
0
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
18 juin 2008 à 15:20
Alors j'ai vu ton MP
Ce n'est pas grave que les securité excel soient faciles a faire tomber
Je veux juste un truc ki me demande un mot de passe comme sa sa fera plaisir a mon entreprise
en fait j'ai pas trop le temps et il faut que sa leur convienne et c'est ça qu'ils veulent

Comment je peux faire??
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
18 juin 2008 à 16:53
Alors fais simplement un userform avec une zone de texte et un bouton OK

De tête :

Sub Bouton1_Click()
MdP="toto"
if TextBox1.Value <> MdP Then
Sheets(3).select
end if
unload userform1
End Sub

et dans le code de ThisWorkBook tu mets

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
if sh.name="Saisie Documents" then
userform1.show
end if
End Sub
0
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
18 juin 2008 à 18:25
Je ne sais pas faire un userform
Comment faire?
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
18 juin 2008 à 18:43
Insertion, UserForm dans l'éditeur Visual Basic et tu places les éléments de ta boîte de dialogue
0
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
18 juin 2008 à 22:50
OK et comment la programmer???

Je te remercie de ton aide
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
18 juin 2008 à 23:03
Voir post #15
0
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
19 juin 2008 à 10:12
OK

Je te remercie beaucoupe mais je viens de constater des petits problèmes dans la macro qui me fait rajouter des lignes

Comme tu as vu dans mon fichier j'ai plusieurs onglets.

Pour l'onglet Contrats ça marche nickel ça me suppirme la ligne puis la recréee mais pour l'onglet Documents je peux executer la macro une fois puis sa me met un bug et la console de débogage me surligne ça en jaune

Selection.EntireRow.Insert

De plus j'ai un deuxième problème, lorsque je rajoute une ligne avec l'aide de ta macro la ligne qui est rajoutée est "complète"

Je m'explique,
La ligne se termine à la derniere colonne ( la colonne IV ) or je voudrais qu'elle fasse uniquement la taille de mon tableau
Quelle condition dois je rajouter??

Merci de ton aide
0
onesdf Messages postés 375 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 17 octobre 2008 120
19 juin 2008 à 10:35
Oui c'est la ligne entière qui est colorée, à l'aide de la ligne

Rows(2).Interior.ColorIndex = 45

Si tu ne veux qu'une plage il faut mettre

Range("A2:M2").Interior.ColorIndex = 45
0
ribery_7_91 Messages postés 233 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 4 septembre 2010 16
19 juin 2008 à 11:00
OK je te remercie

J'ai d'autres problèmes que je te fais part :

Avant je n'avais pas la ligne orange dans mes feuilles excel ( Contrats et Documents ) donc les macros marchaient parfaitement. Mais depuis que j'ai ajouté cette ligne orange cela ne marche plus alors voila mes problèmes :

1er problème :

- Les macros de tri marchent parfaitement bien sous l'onglet Contrats mais sous l'onglet Documents, je peux executer une seule fois une des macros et si je tente d'executer une deuxiéme ou une autre macro cela me met un bug et lorsque j'ouvre VBA Editor pour le debogage ça me surligne cette ligne en Jaune :
Selection.EntireRow.Insert
Je ne comprends pas surtout que ça marche sous Contrats

Voici une des macros de tri :

Sub MacroTriCote()

Rows(2).Delete
Application.Goto Reference:="Cote"
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A2").Select
Selection.EntireRow.Insert
Rows(2).RowHeight = 2.25
Rows(2).Interior.ColorIndex = 45
Range("A3").Select
End Sub


Ensuite 2eme problème :

- Lors de la saisie d'un nouveau document ou contrat cela ne marche plus du à la ligne que j'ai rajouté. Je pense qu'il faut faire comme pour les macros de tri en supprimant cette ligne puis la rajouter mais je ne sais pas où je dois mettre les instructions pour que ça marche correctement.

Aurais tu des solutons??

Merci beaucoup
0