Macro : Types de caractères

  • Initiateur de la discussion Initiateur de la discussion roidurif
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

roidurif

XLDnaute Occasionnel
Bonjour,

Je dispose d'un tableau dans lequel il y'a des colonnes qui doivent accepter soit des caracteres numerique ou caracteres alphabetiques.

Cette macro doit verifier dans chacune des colonnes si le type de caractere renseignés est conforme, si ce n'est pas le cas alors elle indique dans une autre feuille nommé "controle" le numéro de la célulle en erreur.

Voici le code, mais connais pas trop IsNumeric

Code:
Sub Type_Caractere()
Sheets("CONTROLE").Range("U12:U65536").ClearContents
Application.ScreenUpdating = False
Col_Alpha = Array("AB", "AF", "AG", "AH", "AJ", "AK", "AM", "AN", "AO", "AW", "AX", "BK", "BN", "BO", "BQ", "BR", "BT", "BW", "BX", "BY", "BZ", "CA", "CB", "BA", "BL", "BP", "BS")
Col_Num = Array("B", "F", "J", "N", "R", "V", "Z", "AC", "AE", "AI", "AL", "AP", "BG")
With Sheets("feuil1")
     For i = 2 To .Range("A65536").End(xlUp).Row 'commencement du contrôle à la 2eme ligne du tableau
          For j = 0 To 89 'Nbre colonne tableau
              If Not IsNumeric.Cells(i, Col_Num(j)) Then
                    Sheets("Feuil2").Range("U65536").End(xlUp).Offset(1) = .Cells(i, Col_Num(j)).Address(0, 0)
                 End If
              End If
            If IsNumeric.Cells(i, Col_Alpha(j)) Then
            Sheets("Feuil2").Range("U65536").End(xlUp).Offset(1) = .Cells(i, Col_Alpha(j)).Address(0, 0)
          End If
        Next
    Next
Application.ScreenUpdating = True
End With
End Sub

Merci
 
Dernière édition:
Re : Macro : Types de caractères

Re,

J'essaye d'adapter cette macro, je pense avoir fait une mauvaise manip, si qu'elqu'un peut m'expliquer où es que j'ai faux, ce serais sympas.

merci de votre aide

Code:
Dim x As Range
Sheets(CONTROLE).Range("U12:U65536").ClearContents
Application.ScreenUpdating = False
Col_Alpha = Array("AB", "AF", "AG", "AH", "AJ", "AK", "AM", "AN", "AO", "AW", "AX", "BK", "BN", "BO", "BQ", "BR", "BT", "BW", "BX", "BY", "BZ", "CA", "CB", "BA", "BL", "BP", "BS")
Col_Num = Array("B", "F", "J", "N", "R", "V", "Z", "AC", "AE", "AI", "AL", "AP", "BG")
With Sheets("Feuil1")
For i = 2 To .Range("A65536").End(xlUp).Row
For Each i In Col_Alpha
If Not IsNumeric(i) Then
Sheets("Feuil2").Range("U65536").End(xlUp).Offset(1) = .Cells.Address(0, 0)
End If
Next
Next
End With
 
Re : Macro : Types de caractères

Bonjour,

J'ai essayé d'adapter cette macro, je crois que j'ai loupé quelque chose?
Code:
Sub COL()
Dim Colonne(), x As Range, i As Long
Colonne = Array("AB", "AF", "AG", "AH", "AJ", "AK", "AM", "AN", "AO", "AW", "AX", "BK", "BN", "BO", "BQ", "BR", "BT", "BW", "BX", "BY", "BZ", "CA", "CB", "BA", "BL", "BP", "BS")
With Sheets("BDD")
For Each x In .Range("AB2", .[AB65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
For i = LBound(Colonne) To UBound(Colonne)
If Not IsNumeric(Colonne(x)) Then Sheets("CONTROLE").Range("U65536").End(xlUp).Offset(1) = x.Address(REF_ABS, REF_ABS)
Next
Next
End With
End Sub

Pour une seul colonne j'arrive bien,

Code:
Sub COL()
Dim Colonne(), x As Range, i As Long
With Sheets("BDD")
For Each x In .Range("AB2", .[AB65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
If Not IsNumeric(x) Then Sheets("CONTROLE").Range("U65536").End(xlUp).Offset(1) = x.Address(REF_ABS, REF_ABS)
Next
End With
End Sub

merci
 
Dernière édition:
Re : Macro : Types de caractères

Bonjour

roidurif

La question n'était pas de savoir si je suis froissé ou pas.
(Personnellement il n'y que mes chemises qui se froissent ... )

C'est juste que savoir que la question est posée ailleurs permet ne pas perdre son temps à poster une réponse qui aurait été donné sur un autre forum.

Donc préciser ici qu'une question est aussi posé ailleurs , permets de vérifier les diverses solutions déjà apportées, et le cas échéant, si le problème persiste, de proposer une solution non envisagée ailleurs.


Tu avais pourtant matière à trouver seul ...
Code:
Sub macro()
[COLOR="Green"]'adapter, svp,  avant usage ce qui doit l'être[/COLOR]
Dim Colonne, s As Worksheet, d As Worksheet
Dim x As Range, i&, j&, fin&
    Colonne = _
        Array("AB", "AF", "AG", "AH", "AJ", "AK", "AM", "AN", "AO", "AW", _
                "AX", "BK", "BN", "BO", "BQ", "BR", "BT", "BW", "BX", "BY", _
                "BZ", "CA", "CB", "BA", "BL", "BP", "BS")
                
Set s = Sheets(1): Set d = Sheets(2): fin = s.UsedRange.Rows.Count
Application.ScreenUpdating = False
    For i = 0 To UBound(Colonne)
        For j = 1 To fin
        If Not IsEmpty(Cells(j, Colonne(i))) And Not IsNumeric((Cells(j, Colonne(i)))) Then
        d.Range("U65536").End(xlUp).Offset(1) = _
        Cells(j, Colonne(i)).Address(1, 1)
        End If
    Next j
Next i
Application.ScreenUpdating = True
End Sub
 
Dernière édition:
Re : Macro : Types de caractères

Bonjour roidurif, vbacrumble,

Une solution voisine :

Code:
Sub COL()
Dim Colonne(), plage As Range, i As Integer, cel As Range
Colonne = Array("AB", "AF", "AG", "AH", "AJ", "AK", "AM", "AN", "AO", "AW", "AX", "BK", "BN", "BO", "BQ", "BR", "BT", "BW", "BX", "BY", "BZ", "CA", "CB", "BA", "BL", "BP", "BS")
Sheets("CONTROLE").[U:U].ClearContents
With Sheets("BDD")
  Set plage = .Rows("2:" & .[AB65536].End(xlUp).Row)
  For i = 0 To UBound(Colonne)
    For Each cel In Intersect(.Columns(Colonne(i)), plage)
      If cel <> "" And Not IsNumeric(cel) Then Sheets("CONTROLE").[U65536].End(xlUp)(2) = cel.Address
    Next
  Next
End With
End Sub

A noter que cel <> "" n'est pas indispensable quand la cellule est vraiment vide, car alors elle est considérée comme numérique.

A+
 
Re : Macro : Types de caractères

Bonjour job75, vbacrumble,

Je me suis confonté à quelques celulles en nombre texte (petit triangle vert), du coup c'est reconnu comme du non numerique alors que c'est saisie 1.12 par exemple.

Pour y remedier, faut-il que j' ajoute
Code:
CStr

Dans ce code par exemple
Code:
Sub COL()
Dim Colonne(), plage As Range, i As Integer, cel As Range
Colonne = Array("AB", "AF", "AG", "AH", "AJ", "AK", "AM", "AN", "AO", "AW", "AX", "BK", "BN", "BO", "BQ", "BR", "BT", "BW", "BX", "BY", "BZ", "CA", "CB", "BA", "BL", "BP", "BS")
Sheets("CONTROLE").[U:U].ClearContents
With Sheets("BDD")
  Set plage = .Rows("2:" & .[AB65536].End(xlUp).Row)
  For i = 0 To UBound(Colonne)
    For Each cel In Intersect(.Columns(Colonne(i)), plage)
      If cel <> "" And Not IsNumeric(cel) Then Sheets("CONTROLE").[U65536].End(xlUp)(2) = cel.Address
    Next
  Next
End With
End Sub

merci d'avance
 
Re : Macro : Types de caractères

Re job75, vbacrumble,

C'est plutôt un problème de séparateur, un nombre saisie avec un separateur point, c'est reconnu comme non numérique.

Que faut il faire pour y remedier svp?


Dans ce code par exemple
Code:
Sub COL()
Dim Colonne(), plage As Range, i As Integer, cel As Range
Colonne = Array("AB", "AF", "AG", "AH", "AJ", "AK", "AM", "AN", "AO", "AW", "AX", "BK", "BN", "BO", "BQ", "BR", "BT", "BW", "BX", "BY", "BZ", "CA", "CB", "BA", "BL", "BP", "BS")
Sheets("CONTROLE").[U:U].ClearContents
With Sheets("BDD")
  Set plage = .Rows("2:" & .[AB65536].End(xlUp).Row)
  For i = 0 To UBound(Colonne)
    For Each cel In Intersect(.Columns(Colonne(i)), plage)
      If cel <> "" And Not IsNumeric(cel) Then Sheets("CONTROLE").[U65536].End(xlUp)(2) = cel.Address
    Next
  Next
End With
End Sub

merci d'avance[/QUOTE]
 
Re : Macro : Types de caractères

Bonsoir,

Pour que ça fonctionne quel que soit le séparateur décimal utilisé, dans ma macro, utiliser ce code :

Code:
If cel <> "" And Not [COLOR="Red"](IsNumeric(Replace(cel, ".", ",")) Or IsNumeric(Replace(cel, ",", ".")))[/COLOR] Then Sheets("CONTROLE").[U65536].End(xlUp)(2) = cel.Address

Pas testé...

A+
 
Re : Macro : Types de caractères

Re

Ca semble bon

Code:
Sub COL()
Dim Colonne(), plage As Range, i As Integer, cel As Range
Colonne = Array("AB", "AF", "AG", "AH", "AJ", "AK", "AM", "AN", "AO", "AW", "AX", "BK", "BN", "BO", "BQ", "BR", "BT", "BW", "BX", "BY", "BZ", "CA", "CB", "BA", "BL", "BP", "BS")
Sheets("Feuil2").[U12:U1000].ClearContents
With Sheets("BDD")
  Set plage = .Rows("2:" & .[AB65536].End(xlUp).Row)
  For i = 0 To UBound(Colonne)
    For Each cel In Intersect(.Columns(Colonne(i)), plage)
      If cel <> "" And Not IsNumeric(cel) And InStr(cel, ".") > 0 Then Sheets("Feuil2").[U65536].End(xlUp)(2) = cel.Address(0, 0)
    Next
  Next
End With
End Sub

EDITION: bonsoir job75
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
179
Réponses
5
Affichages
241
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
481
Réponses
3
Affichages
665
Réponses
10
Affichages
799
Retour