Trouver une ligne avec vba pour lancer un tri
Résolu/Fermé
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
-
4 mars 2009 à 15:56
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 - 9 mars 2009 à 10:24
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 - 9 mars 2009 à 10:24
A voir également:
- Trouver une ligne avec vba pour lancer un tri
- Trouver adresse mac - Guide
- Trouver un lieu avec coordonnées gps - Guide
- Aller à la ligne excel - Guide
- Partager photos en ligne - Guide
- Vente en ligne particulier - Guide
9 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
4 mars 2009 à 18:12
4 mars 2009 à 18:12
bonjour,
essaies cette instruction qui te donne la dernière ligne avant le premier zéro
lig = Columns(2).Find(0, [B65536]).Row - 1
ton tableau faisant 90 lignes , lig peut déclaré comme byte
essaies cette instruction qui te donne la dernière ligne avant le premier zéro
lig = Columns(2).Find(0, [B65536]).Row - 1
ton tableau faisant 90 lignes , lig peut déclaré comme byte
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
355
4 mars 2009 à 18:56
4 mars 2009 à 18:56
Bonjour Michel, et merci pour ta réponse.
Je n'ai pas essayé ta solution qui me semble intéressante, mais le problème sera peut-être que les titres de mon tableau sont à la ligne 9 et les données à partir de la ligne 10. Ton instruction risque fort de me donner 0 parce que je n'ai rien au dessus de la ligne 9 (cellules vides), est-ce que je me trompe ou bien est ce que ça fait la différence entre cellule vide et cellule à 0?
Par ailleurs, que veux-tu dire par "lig peut déclaré comme byte" et comment concrètement j'introduis lig dans mon code? Est-ce comme ceci: Rows("10:lig" )?
Merci pour ton aide
Je n'ai pas essayé ta solution qui me semble intéressante, mais le problème sera peut-être que les titres de mon tableau sont à la ligne 9 et les données à partir de la ligne 10. Ton instruction risque fort de me donner 0 parce que je n'ai rien au dessus de la ligne 9 (cellules vides), est-ce que je me trompe ou bien est ce que ça fait la différence entre cellule vide et cellule à 0?
Par ailleurs, que veux-tu dire par "lig peut déclaré comme byte" et comment concrètement j'introduis lig dans mon code? Est-ce comme ceci: Rows("10:lig" )?
Merci pour ton aide
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
4 mars 2009 à 20:39
4 mars 2009 à 20:39
sub tamacro()
dim lig as byte
....toncode
lig = Columns(2).Find(0, [B9]).Row - 1
rows("10;" & log).Sort Key1:=Range("C10"), Order1:=xlAscending, .... suite deton code
End sub
les select-selection sont inutiles, mangent de la mémoire et ralentissement fortement l'exécution.
dim lig as byte
....toncode
lig = Columns(2).Find(0, [B9]).Row - 1
rows("10;" & log).Sort Key1:=Range("C10"), Order1:=xlAscending, .... suite deton code
End sub
les select-selection sont inutiles, mangent de la mémoire et ralentissement fortement l'exécution.
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
355
4 mars 2009 à 22:35
4 mars 2009 à 22:35
Salut Michel,
J'ai essayé ton code et ça m'affiche "Erreur d'exécution 13" "Incompatibilité de type" et le debogage localise le pb sur la ligne Rows. Je ne vois pas ce qui cloche.
Voici le nouveau code:
Sub Tri_distance()
Sheets("Programmations").Select
ActiveSheet.Unprotect
Dim lig As Byte
lig = Columns(2).Find(0, [B9]).Row - 1
Rows("10;" & lig).Sort Key1:=Range("C10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
ActiveSheet.Protect, userInterfaceOnly:=True
End Sub
J'ai essayé ton code et ça m'affiche "Erreur d'exécution 13" "Incompatibilité de type" et le debogage localise le pb sur la ligne Rows. Je ne vois pas ce qui cloche.
Voici le nouveau code:
Sub Tri_distance()
Sheets("Programmations").Select
ActiveSheet.Unprotect
Dim lig As Byte
lig = Columns(2).Find(0, [B9]).Row - 1
Rows("10;" & lig).Sort Key1:=Range("C10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
ActiveSheet.Protect, userInterfaceOnly:=True
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
355
4 mars 2009 à 22:59
4 mars 2009 à 22:59
Je reviens sur le forum suite à mes essais. En fait il y avait une petite erreur dans la ligne rows qui est devenue:
Rows("10:" & lig).Sort Key1:=Range("C10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Par contre, si je n'ai plus d'erreur maintenant, je n'ai aucun tri qui se fait. Le tableau reste en l'état.
Rows("10:" & lig).Sort Key1:=Range("C10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Par contre, si je n'ai plus d'erreur maintenant, je n'ai aucun tri qui se fait. Le tableau reste en l'état.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
5 mars 2009 à 09:17
5 mars 2009 à 09:17
bonjour il faut que tu tries sur ton tableau et non sur les lignes
par exemple: range(A9:XXXX" & lig) ici étiquette incluse; XXXX représente la dernière colonne
par exemple: range(A9:XXXX" & lig) ici étiquette incluse; XXXX représente la dernière colonne
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
355
5 mars 2009 à 10:39
5 mars 2009 à 10:39
J'ai fait quelques essais et le problème n'est pas sur l'instruction rows. Si je remplace & lig par 77, le tri fonctionne impec.
Il est sur le résultat de la ligne d'instruction:
lig = Columns(2).Find(0, [B9]).Row - 1
lig prend la valeur 14 et non 77. Pourtant toutes mes cellules de B9 à B77 sont pleines de formules qui renvoient des textes, B14 et B15 sont bien des textes (vérifié par la formule ESTTEXTE()), et la première formule égale à 0 se trouve dans B78.
Or, pour le moment le tri se fait de la ligne 10 à 14 uniquement.
Ne serait-ce pas un problème avec Dim lig As Byte qui stocke sous forme de nombre unique codé sur 8 bits?
Il est sur le résultat de la ligne d'instruction:
lig = Columns(2).Find(0, [B9]).Row - 1
lig prend la valeur 14 et non 77. Pourtant toutes mes cellules de B9 à B77 sont pleines de formules qui renvoient des textes, B14 et B15 sont bien des textes (vérifié par la formule ESTTEXTE()), et la première formule égale à 0 se trouve dans B78.
Or, pour le moment le tri se fait de la ligne 10 à 14 uniquement.
Ne serait-ce pas un problème avec Dim lig As Byte qui stocke sous forme de nombre unique codé sur 8 bits?
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
355
6 mars 2009 à 17:26
6 mars 2009 à 17:26
Quelqu'un a t'il une idée pourquoi le code ci dessus me renvoi la valeur 14 alors qu'il devrait me donner 77 (toutes les lignes entre B10 et B77 sont occupées par du texte) ?
Pour le moment je suis scotché sur cette instruction qui ne fonctionne pas correctement.
Merci pour votre aide.
Pour le moment je suis scotché sur cette instruction qui ne fonctionne pas correctement.
Merci pour votre aide.
mic13710
Messages postés
1087
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
13 mai 2021
355
9 mars 2009 à 10:24
9 mars 2009 à 10:24
Puisque l'instruction "lig = Columns(2).Find(0, [B9]).Row - 1" ne marche pas (ne trouve pas la valeur "0"??), et que j'en ai eu assez de me prendre le choux avec ce truc, j'ai contourné le problème de la manière suivante:
J'ai utilisé une bonne vieille formule Excel dans la cellule C120:" =EQUIV(0;C10:C119;0)" pour trouver la première cellule à 0 dans le Range C10:C119 (ce qui me donne 69 en l'occurrence) (note: le range B10:B119 renvoit au même résultat), puis j'utilise le code suivant pour faire mon classement:
La variable lig est déclaré "Dim lig As Byte" en tête de module (car utilisée pour d'autres classements)
lig = ActiveSheet.Range("C120").Value + 8
ActiveSheet.Unprotect
Rows("10:" & lig).Sort Key1:=Range("C10"), Order1:=xlAscending, _
Key2:=Range("A10"), Order2:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
Range("A8").Value = "PARCOURS CLASSÉS PAR DISTANCES RÉELLES"
ActiveSheet.Protect , userInterfaceOnly:=True
Et là, ça marche impec.
Il m'a suffit ensuite de copier ce code sur d'autres macros, de changer les paramètres de tri, pour avoir différents classements (que j'identifie dans la cellule A8), le tout associés à des boutons, et le tour est joué.
Mais ça n'explique toujours pas pourquoi l'instruction de départ ne fonctionne pas.
J'ai utilisé une bonne vieille formule Excel dans la cellule C120:" =EQUIV(0;C10:C119;0)" pour trouver la première cellule à 0 dans le Range C10:C119 (ce qui me donne 69 en l'occurrence) (note: le range B10:B119 renvoit au même résultat), puis j'utilise le code suivant pour faire mon classement:
La variable lig est déclaré "Dim lig As Byte" en tête de module (car utilisée pour d'autres classements)
lig = ActiveSheet.Range("C120").Value + 8
ActiveSheet.Unprotect
Rows("10:" & lig).Sort Key1:=Range("C10"), Order1:=xlAscending, _
Key2:=Range("A10"), Order2:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
Range("A8").Value = "PARCOURS CLASSÉS PAR DISTANCES RÉELLES"
ActiveSheet.Protect , userInterfaceOnly:=True
Et là, ça marche impec.
Il m'a suffit ensuite de copier ce code sur d'autres macros, de changer les paramètres de tri, pour avoir différents classements (que j'identifie dans la cellule A8), le tout associés à des boutons, et le tour est joué.
Mais ça n'explique toujours pas pourquoi l'instruction de départ ne fonctionne pas.