rechercher si plage cellule contient 1 élément d'array

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
g
gloutoni
Membre habitué
Membre habitué
Messages : 149
Inscrit le : 12 février 2015
Version d'Excel : 2010

Message par gloutoni » 9 avril 2015, 22:27

Bonjour,

J'ai fait un code mais j'ai du mal à le manipuler car il produit une erreur de type.

Ce que je souhaite faire :
rechercher cellule par cellule si celle-ci contient 1 des éléments de l'array.

savoir si les cellules 2-3-4-5-6- 8-9-10-11-12-13-14-15 de la ligne variable
contiennent au moins 1 lettre ou 1 chiffre (l'ensemble étant dans un array).

Mon code est lourd, mais j'ai chercher ;-)
Sub checkfin()
    'désactiver macro événementielle'
    Application.EnableEvents = False
    
    'initialiser variable'
    Dim DernLigne As Integer
    DernLigne = Range("B1048576").End(xlUp).Row + 1
    If Range("H1048576").End(xlUp).Row + 1 > DernLigne Then
        DernLigne = Range("H1048576").End(xlUp).Row + 1
    End If
    
    'test de remise à zéro du format'
    If cellulevide(DernLigne) = True Then
        Range(Cells(DernLigne, 17), Cells(DernLigne, 23)).Select
        Range(Cells(DernLigne, 17), Cells(DernLigne, 23)).Activate
        Selection.ClearFormats
    End If
    
    Cells(7, 2).Select
    
    
    'ACTIVER MACRO EVENEMENTIELLE'
    Application.EnableEvents = True
            
    'SAUVEGARDE AUTOMATIQUE'
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    Application.DisplayAlerts = True
End Sub

Function cellulevide(DernLigne As Integer) As Boolean
    'initialisation variable'
    Dim colonne As Integer
    colonne = 2
    cellulevide = True
    Dim plage("A", "B", "C", "D", "E", "F", "G", "H", "I", _
                "J", "K", "l", "M", "N", "O", "P", "Q", "R", _
                "S", "T", "U", "V", "W", "X", "Y", "Z", "0", _
                "1", "2", "3", "4", "5", "6", "7", "8", "9") As Variant
    
    While colonne <= 15
        If Not (colonne = 7) Then
            If in_array(UCase(Cells(DernLigne, colonne).Value), plage) = True Then
                cellulevide = False
                colonne = 15
            End If
        End If
        colonne = colonne + 1
    Wend
End Function
Remerciement par avance
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'446
Appréciations reçues : 427
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 9 avril 2015, 23:26

Bonsoir,

proposition de fonction qui retourne Vrai si la chaîne donnée en paramètre contient au moins un chiffre ou une lettre.
Function contchiflet(A)
If A Like "*[A-Z]*" Or A Like "*#*" Then contchiflet = True Else contchiflet = False
End Function
et intégrée dans ton code, cela pourrait donner ceci, à tester
Sub checkfin()
    'désactiver macro événementielle'
   Application.EnableEvents = False
    
    'initialiser variable'
   Dim DernLigne As Integer
    DernLigne = Range("B1048576").End(xlUp).Row + 1
    If Range("H1048576").End(xlUp).Row + 1 > DernLigne Then
        DernLigne = Range("H1048576").End(xlUp).Row + 1
    End If
    
    'test de remise à zéro du format'
   If cellulevide(DernLigne) = True Then
        Range(Cells(DernLigne, 17), Cells(DernLigne, 23)).ClearFormats
    End If
    
    Cells(7, 2).Select
    
    
    'ACTIVER MACRO EVENEMENTIELLE'
   Application.EnableEvents = True
            
    'SAUVEGARDE AUTOMATIQUE'
   Application.DisplayAlerts = False
    ActiveWorkbook.Save
    Application.DisplayAlerts = True
End Sub

Function cellulevide(DernLigne As Integer) As Boolean
    'initialisation variable'
   Dim colonne As Integer
    colonne = 2
    cellulevide = True
   
    While colonne <= 15
        If Not (colonne = 7) Then
            If contchiflet(UCase(Cells(DernLigne, colonne).Value)) = True Then
                cellulevide = False
                Exit Function
            End If
        End If
        colonne = colonne + 1
    Wend
End Function

Function contchiflet(A)
If A Like "*[A-Z]*" Or A Like "*#*" Then contchiflet = True Else contchiflet = False
End Function
g
gloutoni
Membre habitué
Membre habitué
Messages : 149
Inscrit le : 12 février 2015
Version d'Excel : 2010

Message par gloutoni » 10 avril 2015, 12:54

C'est parfait, pourrais-tu m'expliquer ta fonction contchiflet() stp, je ne la comprends pas, le "*#*" surtout, et je me prenais vraiment la tête, mais quand on ne sais pas on ne sais pas.

Merci
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'446
Appréciations reçues : 427
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 10 avril 2015, 13:25

Bonjour,

la fonction utilise l'opérateur de comparaison "Like" qui permet de vérifier si une chaîne de caractères correspond à un modèle donné.

*[A-Z]* permet de vérifier si la chaîne de caractères contient une lettre de A-Z

*#* permet de vérifier si la chaîne de caractère contient un chiffre.

pour le reste je te renvoie à l'aide sur l'instruction "Like".
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message