Si caractères de cellule numérique ET différent d'un espace

Chris57

XLDnaute Occasionnel
Bonjour à tous,

je bricole un fichier pour renommer des fichiers à la chaine.
Mais je bute sur un truc :

Code:
For i = 10 To 509
     If Cells(i, 4) <> "" Then
           If IsNumeric(Left(Cells(i, 4).Value, 2)) Then
                 Cells(i, 4).Select
            End If
      End If
Next i

Je cherche donc dans la colonne D les cellules dont les 2 premiers caractères sont des chiffres.
Seulement il me sélectionne également les textes du genre :

4 photo toto

il considère apparemment les espaces comme des chiffres !

Y a t'il une solution ?
 

mth

XLDnaute Barbatruc
Re : Si caractères de cellule numérique ET différent d'un espace

Bonjour à tous,

Il me semble que la fonction LEFT() renvoie un caractère texte, peut-être comme ceci pour le numérique:

Code:
IsNumeric(Left(Cells(i, 4).Value, 2)*1)

Bonne journée,

mth

Edit :) :) Un grand bonjour matinal job :) :)
bise,
m
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Si caractères de cellule numérique ET différent d'un espace

Re, bonjour Mireille :)

L'idée du Select est discutable, car c'est toujours la dernière cellule trouvée qui sera sélectionnée...

Si l'on veut toutes les cellules :

Code:
For i = 10 To 509
  If Cells(i, 4) Like "##*" Then _
    mes = mes & Chr(10) & Cells(i, 4).Address(0, 0)
Next
MsgBox "Cellules trouvées :" & Chr(10) & mes
Edit : et bien sûr si l'on veut afficher la valeur des cellules :

Code:
For i = 10 To 509
  If Cells(i, 4) Like "##*" Then _
    mes = mes & Chr(10) & Cells(i, 4).Address(0, 0) & " - " & Cells(i, 4)
Next
MsgBox "Cellules trouvées :" & Chr(10) & mes
A+
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Si caractères de cellule numérique ET différent d'un espace

Bonjour à tous


Pourquoi ne pas simplement utiliser un filtre élaboré?
Cela évite l'emploi d'une boucle.
FET.png
PS: le critère du filtre est en B2
(C'est une formule)
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Si caractères de cellule numérique ET différent d'un espace

Bonjour Staple,

Le filtre élaboré est en effet une excellente idée, c'est toujours mieux sans macro.

Mais pour répondre au problème posé, j'utiliserais comme formule du critère en B2 :

Code:
=ESTNUM(GAUCHE(A2)+STXT(A2;2;1))
A+
 

Chris57

XLDnaute Occasionnel
Re : Si caractères de cellule numérique ET différent d'un espace

bonjour à tous et merci pour votre aide !!

je ne souhaite pas de formules, d'une part parce-que les formules disparaissent quelque fois (oui, je suis anti-formules) après de fausses manips mais aussi parce qu'il se peut qu'en fonction des fichiers à renommer, on peut avoir envie de laisser ce numéro (par exemple s'il s'agit de mp3, je vais virer les numéros de pistes. Par contre s'il s'agit de photos, je vais peut-être garder les chiffres s'il s'agit par exemple de dates).

La solution de Grand Chaman Excel est très ingénieuse, mais celle de job75 s'adapte parfaitement à mon code avec peu de changements. J'ai testé et aucun problème de select, pour le moment ;)
Pour info, voici le code finale dans un userform :
Code:
Private Sub UserForm_activate()
    [D5].Select
    ' Position de l'userform dans la page et donne le focus
        Me.Left = 100
        Me.Top = 150
        Me.nbrCHIFFRES.SetFocus
        
    ' Réinitialise les textes
        COMMENTAIRE.Caption = ""
        COMMENTAIRE2.Caption = ""
        COMMENTAIRE.ForeColor = RGB(0, 0, 0)
        COMMENTAIRE2.ForeColor = RGB(0, 0, 0)
        Supprimer.Caption = "Lancer"
        COMMENTAIRE2.ForeColor = RGB(0, 0, 0)
        
    ' Désactive les boutons "Suivant" et "Supprimer"
        Suivant.Enabled = False
        Supprimer.Enabled = False
        
    ' Réinitialise la variable
        nbrCHIFFRES = ""
    
    
End Sub

Private Sub nbrCHIFFRES_Change()
' Si entrée d'une valeur dans la case :
    COMMENTAIRE.Caption = ""
    COMMENTAIRE.ForeColor = RGB(0, 0, 0)
    
    If nbrCHIFFRES <> "" Then                   ' Vérifie si c'est un chiffre
            If IsNumeric(nbrCHIFFRES) Then
                COMMENTAIRE.ForeColor = RGB(0, 0, 0)
                If nbrCHIFFRES = 1 Then COMMENTAIRE.Caption = "Recherche de titres dont le premier caractère est un chiffre"
                If nbrCHIFFRES > 1 Then COMMENTAIRE.Caption = "Recherche de titres dont les " & nbrCHIFFRES & " premiers caractères sont des chiffres"
                Supprimer.Enabled = True
            Else
                ' Si pas un chiffre
                COMMENTAIRE.ForeColor = RGB(255, 0, 0)
                COMMENTAIRE.Caption = "Ceci n'est pas un chiffre!" & Chr(13) & "Veuillez taper le nombre de chiffres que vous cherchez en début de titre"
                Exit Sub
            End If
    End If

    
End Sub

Private Sub Suivant_Click()
    ' Passe au résultat suivant sans rien faire
        Selection.Offset(-1, 0).Select
        If ActiveCell.Row <= 11 Then [D10].Select ' Pour ne pas sortir de la liste
End Sub

Private Sub Supprimer_Click()
    ' Si rien n'est entré dans la case de saisie
        'nbrCHIFFRES

    ' Si c'est le premier lancement alors :
        If Supprimer.Caption = "Lancer" Then
                RECHERCHEtitresAVECchiffres
                Supprimer.Caption = "Supprimer"
    ' Sinon supprime le chiffre
        Else
                Selection.Value = Right(Selection.Value, Len(Selection) - nbrCHIFFRES)
                
            ' S'il y a un espace ou un "-" juste après le supprime aussi
                res = 0
                For i = 1 To nbrCHIFFRES + 1 'Len(Selection)
                    If Mid(Selection, i, 1) = " " Or Mid(Selection, i, 1) = "-" Then
                        Selection.Value = Right(Selection.Value, Len(Selection) - 1)
                    End If
                Next
                       
                RECHERCHEtitresAVECchiffres
                
        End If
End Sub

Sub RECHERCHEtitresAVECchiffres()
Suivant.Enabled = True
    ' Compte le nombre de titres comportant x chiffres au début
        a = 0
        For i = 10 To 509
            If Cells(i, 4) <> "" Then
                If IsNumeric(Left(Cells(i, 4).Value, nbrCHIFFRES)) Then a = a + 1
            End If
        Next i
    
    ' Si rien n'est trouvé
        If a = 0 Then
            COMMENTAIRE2.ForeColor = RGB(255, 0, 0)
            COMMENTAIRE2.Caption = "Aucun nom ne comporte de chiffre dans le(s) " & nbrCHIFFRES & " caractère(s)"
            [C8].Select
            Exit Sub
        End If
        
    ' Sinon propose de supprimer ces chiffres (ne supprime pas ici !!)
        For i = 10 To 509
            If Cells(i, 4) <> "" Then
                If Cells(i, 4) Like "##*" Then
                'If IsNumeric(Left(Cells(i, 4).Value, nbrCHIFFRES)) Then
                    Cells(i, 4).Select
                    COMMENTAIRE2.Caption = "Les " & nbrCHIFFRES & " premiers caractères de ce nom sont des chiffres" & Chr(13) & "Voulez-vous les supprimer ?"
                End If
            End If
        Next i

End Sub

Private Sub Annuler_Click()
    Unload NUMEROSpiste
    NUMEROSpiste.Hide
End Sub
 

Discussions similaires

Réponses
8
Affichages
666

Statistiques des forums

Discussions
312 316
Messages
2 087 185
Membres
103 491
dernier inscrit
bilg1