[Résol]Calc: dernière occurence d'uncaractère
antokomba
Messages postés
17
Statut
Membre
-
antokomba Messages postés 17 Statut Membre -
antokomba Messages postés 17 Statut Membre -
Bonjour,
J'aimerai automatiser la recherche de la dernière apparition d'un chiffre, et qu'il me donne en résultat le numéros de la dernière ligne ou le chiffre est apparu.(ou mieux: le numéro de la ligne -17 par exemple).
J'ai en gros quelques centaines de lignes, 8 colones, et une 60aine de chiffres possible différents.
Quelle est la formule la plus appropriée?
Pourriez vous me faire un exemplepour un chiffre?
Merci par avance,
Anto.
J'aimerai automatiser la recherche de la dernière apparition d'un chiffre, et qu'il me donne en résultat le numéros de la dernière ligne ou le chiffre est apparu.(ou mieux: le numéro de la ligne -17 par exemple).
J'ai en gros quelques centaines de lignes, 8 colones, et une 60aine de chiffres possible différents.
Quelle est la formule la plus appropriée?
Pourriez vous me faire un exemplepour un chiffre?
Merci par avance,
Anto.
12 réponses
-
bonjour,
sans vba je ne sais pas
avec vba un exemple ou le chiffre cherché est en K1 et le resultat en K2
Private Sub CommandButton1_Click() Dim li As Long, derli As Long, ch As Long, co As Long, lich As Long derli = Range("A65536").End(xlUp).Row lich = 0 ch = Range("K1").Value For li = 1 To derli For co = 1 To 8 If Cells(li, co) = ch Then lich = li End If Next co Next li Range("K2").Value = lich End Sub
bonne suite -
Si j'ai bien compris c'est une macro qu'il faut que j'utilise?
Tu peux me corriger pour la valeur 11 et le résultat dans la case V400 stp?
Private Sub CommandButton1_Click()
Dim li As Long, derli As Long, ch As Long, co As Long, lich As Long
derli = Range("A65536").End(xlUp).Row
lich = 0
ch = Range("A1:E900").11
For li = 1 To derli
For co = 1 To 8
If Cells(li, co) = ch Then
lich = li
End If
Next co
Next li
Range("v400").Value = lich
End Sub -
re
Private Sub CommandButton1_Click() Dim li As Long, derli As Long, ch As Long, co As Long, lich As Long derli = Range("A65536").End(xlUp).Row lich = 0 ch = 11 For li = 1 To derli For co = 1 To 8 If Cells(li, co) = ch Then lich = li End If Next co Next li Range("v400").Value = lich End Sub
devrait aller
RQ. Cette macro est atachée a un bouton qu'il te faudra mettre sur la feuille ( a prendre dans la boite a outils controles), si tu ne sais pas faire, on peut simplifier la manoeuvre
bonne suite -
Je ne sais pas comment on fait pour le boutton :s
J'ai essayé de l'exécuter tel quelle mais j'ai des erreur:
Quand je fait exécuter la macro, ça me met "Erreur de synthaxe BASIC, Private non autorisée dans une procédure"
Aussi j'ai un "Sub Main" dans l'endroit ou j'ai collé la macro, tout au début.
Quand je le supprime j'ai "Erreur d'exécution BASIC. Sous procédure ou procédure de fontion non définie." -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Aussi je viens de voir ce sujet :https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=26929
Ils disent qu'il faut mettre "Option VBASupport 1" au début pour que les macro VBA marchent.
J'ai donc lancé ma macro avec ça, et ça me donne un 368 en V400, ou j'attendais un 19 (car le premier 11 est sur la ligne 19) -
re
désolé, je m'en doutais un peu
donc
Alt F11 pour acceder a l'editeur de macro (tu supprimes tout)
1.tu copies le code suivant (le nom de la procedure a changé)Sub derligne() Dim li As Long, derli As Long, ch As Long, co As Long, lich As Long derli = Range("A65536").End(xlUp).Row lich = 0 ch = 11 For li = 1 To derli For co = 1 To 8 If Cells(li, co) = ch Then lich = li End If Next co Next li Range("V400").Value = lich End Sub
2. Outils/Macros/
tu choisis derligne
Options
touche de raccourci ctrl+s (par exemple)
3. pour executer
Outils/macros/derligne/executer
ou
ctrl+s
si tu veux savoir comment on met un bouton et lui attacher un code, tu dis
bonne suite -
My bad, je viens de voir ton commentaire.
Je remplis les lignes par le haut dans ce fichier...la dernièer occurence sera donc en partant du haut. Vraiment désolé de t'avoir fait perdre du temps avec ça. -
Bonsoir tout le monde,
Sinon c'est faisable par formule.
Avec le nombre recherché (11) en C1 :
ligne 1ère occurence :
=MIN(SI(($A$2:$A$400)=C1;LIGNE($A$2:$A$400);9^9))
ligne dernière occurence :
=MAX((($A$2:$A$400)=C1)*LIGNE($A$2:$A$400))
Les 2 formules sont matricielles et doivent être validées par shift+ctrl+entrée.
(elles s'entourent ensuite de { } )
eric -
@Eric,
Si je comprend bien, si je veux la première occurence du chiffre la première formule suffit?
Sinon j'ai l'impression que ça ne prend en compte que la première colonne.
Aussi quand je fait shift+ctrl+entrée après avoir collée la formule rien ne se passe ( pas de {} ) et j'ai une erreur.-
Re,
j'ai l'impression que ça ne prend en compte que la première colonne.
oui, faite sur A2:A400
quand je fait shift+ctrl+entrée après avoir collée la formule rien ne se passe ( pas de {} ) et j'ai une erreur.
C'est que tu le fais mal... Il faut que le curseur soit dans la zone d'édition des formules en haut.
ex: Classeur1.xls
eric -
-
-
-
re
@ eriiic
jolie formule comme d'habitude et une question, dans mon code y a t'il moyen de quitter les deux for en même temps?
@antokomba
pour ne pas rester sur une impression d'inachevé et si tu veux eviter une formule matricielle
<code>Sub Premli() Dim li As Long, derli As Long, ch As Long, co As Long, lich As Long Dim trouve As Boolean derli = Range("A65536").End(xlUp).Row lich = 0 ch = 11 trouve = False For li = 1 To derli For co = 1 To 8 If Cells(li, co) = ch Then lich = li trouve = True Exit For End If Next co If trouve Then Exit For End If Next li Range("V400").Value = lich End Sub</code>
bonne suite-
Salut ccm81,
y a t'il moyen de quitter les deux for en même temps?
La possibilité que tu as utilisée (tester un flag) est correcte, je procède presque tout le temps ainsi.
Tu pourrais aussi forcer 'li' à sa valeur max (et tant qu'à faire 'co' aussi, et 'trouve' devient inutile). Au next li tu quitteras la boucle. C'est plus court mais peut-être moins lisible.
eric
-
-
@ eriiic
merci, ça me rassure ...
en y reflechissant il y avait encore d'autres ruses plus ou moins propres, comme un goto (là on touche les bas fonds) , un traitement au coeur de la boucle suivi d'un exit sub, mais si je comprends bien, rien du genre exit for-for
cordialement -