[Résol]Calc: dernière occurence d'uncaractère

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.
A voir également:

12 réponses

ccm81 Messages postés 11033 Statut Membre 2 434
 
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
0
antokomba Messages postés 17 Statut Membre
 
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
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
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
0
antokomba Messages postés 17 Statut Membre
 
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."
0

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

Posez votre question
antokomba Messages postés 17 Statut Membre
 
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)
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
et ça me donne un 368 en V400, ou j'attendais un 19 (car le premier 11 est sur la ligne 19)
mais tu as demandé la dernière ligne où le chiffre est apparu !!!
0
antokomba Messages postés 17 Statut Membre
 
Et merde, je me suis mal exprimé... j'ai pas précisé que je remplie les chiffres par le haut ici.
Du coup je fait comment?
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
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
0
antokomba Messages postés 17 Statut Membre
 
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.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
0
antokomba Messages postés 17 Statut Membre
 
@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.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
0
antokomba Messages postés 17 Statut Membre
 
"j'ai l'impression que ça ne prend en compte que la première colonne.
oui, faite sur A2:A400 "
Et c'est possible de le fraire sur 5 colonnes en même temps?
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Re,

avec la valeur recherchée en G1 :
=MIN(SI(($A$2:$E$400)=G1;LIGNE($A$2:$E$400);9^9))
formule matricielle à valider par shift+ctrl+entrée
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
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
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
@ 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
0
antokomba Messages postés 17 Statut Membre
 
Ca marche, merci beaucoup à tous les deux!
0