Code : Tout sélectionner
#cs
_ArrayDeleteRows($aArray1)  ou  _ArrayDeleteRows($aArray1, "")     supprime les lignes vierges
_ArrayDeleteRows($aArray1, "", 3)    supprime les lignes dont la cellule colonne 3 est vide
_ArrayDeleteRows($aArray1, "2", 5)    supprime les lignes dont la cellule colonne 5 contient le nombre 2
_ArrayDeleteRows($aArray1, "25")    supprime les lignes dont au moins une des cellules contient le nombre 25
_ArrayDeleteRows($aArray1, "|25")     supprime les lignes vierges ou dont une des cellules contient le nombre 25
_ArrayDeleteRows($aArray1, "25|17")    supprime les lignes dont au moins une des cellules contient les nombres 25 ou 17
_ArrayDeleteRows($aArray1, "5")        supprime les lignes dont au moins une des cellules contient le nombre 5
_ArrayDeleteRows($aArray1, "5", -1, 1)   supprime les lignes dont au moins une des cellules contient exactement le nombre 5
_ArrayDeleteRows($aArray1, "|25", -1, 1)    supprime les lignes dont au moins une des cellules contient le nombre 25 ou est vide
_ArrayDeleteRows($aArray1, "", -1, 1)     supprime les lignes qui ont au moins une cellule vide
#ce
;=================================================
#include <Array.au3>
Dim $aArray1[31][11]
Dim $Resultat[13][3] = [["Sur total de 30 lignes :  ", "virées :", "reste :"], _ 
                ["Sans ligne vide"], _ 
                ["Sans cellule vide Col 3"], _ 
                ["Sans 2 dans Col 5"], _ 
                ["sans ligne avec 25"], _ 
                ["sans ligne vide ou avec 25"], _ 
                ["Sans ligne avec 17"], _ 
                ["Sans ligne avec 25 ou 17"], _ 
                ["Sans ligne avec 5 (simple)"], _  
                ["Sans ligne avec 5 (fullstring)"], _ 
                ["sans li. avec 25 ou case vide"], _ 
                ["sans ligne avec case vide"], _ 
                [""]]
For $i = 0 To 30
    Local $Rnd = Random(1, 10, 1)
    For $j = 0 To 10
        If $Rnd <> 5 Then
            $aArray1[$i][$j] = Random(1, 100, 1) 
        Else
            $aArray1[$i][$j] = ""
        EndIf
    Next
Next
;$aArray1[3][4] = "25"   ; on fait une ligne avec 25 + une case vide
$aArray1[3][3] = ""      ; on vide la case 3x3 pour le test
$aArray1[4][3] = ""      ; on vide la case 4x3 pour le test  ( 2 lignes avec 1 case vide )
$aArray1[5][4] = ""      ; on vide la case 5x4 pour le test  ( 3 lignes avec 1 case vide )
$aArray2 = $aArray1
_ArrayDisplay($aArray1, "Tableau à traiter :")
;==========================================
; Func _ArrayDeleteRows(ByRef $_array, $_string = "", $_str_col = -1, $_fullstring = 0, $_delim = "|")
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1)                    ; sans ligne vide
$Resultat[1][2] = UBound($aArray1) - 1
$Resultat[1][1] = 30 - $Resultat[1][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "", 3)          ; Sans cellule vide Col 3
$Resultat[2][2] = UBound($aArray1) - 1
$Resultat[2][1] = 30 - $Resultat[2][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "2", 5)       ; Sans ligne avec 2 dans Col 5
$Resultat[3][2] = UBound($aArray1) - 1
$Resultat[3][1] = 30 - $Resultat[3][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "25")           ; Sans ligne avec 25 
$Resultat[4][2] = UBound($aArray1) - 1
$Resultat[4][1] = 30 - $Resultat[4][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "|25")           ; sans ligne vide ou avec 25
$Resultat[5][2] = UBound($aArray1) - 1
$Resultat[5][1] = 30 - $Resultat[5][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "17")           ; Sans ligne avec 17
$Resultat[6][2] = UBound($aArray1) - 1
$Resultat[6][1] = 30 - $Resultat[6][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "25|17")         ; Sans ligne avec 25 ou 17
$Resultat[7][2] = UBound($aArray1) - 1
$Resultat[7][1] = 30 - $Resultat[7][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "5")            ; Sans ligne avec 5
$Resultat[8][2] = UBound($aArray1) - 1
$Resultat[8][1] = 30 - $Resultat[8][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "5", -1, 1)       ; Sans ligne avec 5 (fullstring)
$Resultat[9][2] = UBound($aArray1) - 1
$Resultat[9][1] = 30 - $Resultat[9][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "|25", -1, 1)          ; sans case avec 25 ou vide
$Resultat[10][2] = UBound($aArray1) - 1
$Resultat[10][1] = 30 - $Resultat[10][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "", -1, 1)           ; sans case vide
$Resultat[11][2] = UBound($aArray1) - 1   
$Resultat[11][1] = 30 - $Resultat[11][2]
_ArrayDisplay($Resultat, "Elements retournés")
;===========================================================
Func _ArrayDeleteRows(ByRef $_array, $_string = "", $_str_col = -1, $_fullstring = 0, $_delim = "|")
    Local $dims = UBound($_array, 0), $fired = 0
    If Not IsArray($_array) Or $dims > 2 Then Return SetError(1, 0, 0)
    If $_fullstring <> 0 and $_fullstring <> 1 Then Return SetError(2, 0, 0)
    If StringRegExp($_delim, '\w+') Then Return SetError(3, 0, 0)   ; interdit lettre, chiffre ou _ comme délimiteur
   
   Switch $dims
        Case 1 ; array 1D
            $_str_col = -1
            Local $temp[UBound($_array)]
            For $i = 0 To UBound($_array) - 1
                $row = $_array[$i]
                If _TestRow($row, $_string, $_fullstring, $_delim) Then ; teste la ligne
                    $fired += 1
                    ContinueLoop ; passe à la ligne suivante
                EndIf
                $temp[$i - $fired] = $_array[$i]
            Next
            If UBound($_array) - $fired < 1 Then
                Dim $temp[1]
            Else
                ReDim $temp[UBound($_array) - $fired]
            EndIf
        Case 2 ; array 2D
            Local $cols = UBound($_array, 2), $row = ""
            If $_str_col < -1 Or $_str_col > $cols - 1 Then Return SetError(4, 0, 0)  ; $_str_col = -1
            Local $temp[UBound($_array)][$cols]
            For $i = 0 To UBound($_array) - 1    ; parcourt les lignes
                $row = "|"
                If $_str_col = -1 Then
                    For $j = 0 To $cols - 1
                        $row &= $_array[$i][$j] & "|" ; concatène la ligne avec des séparateurs
                    Next
               Else
                   $row = $_array[$i][$_str_col] & "|"  ; cellule de colonne
                EndIf
                If _TestRow($row, $_string, $_fullstring, $_delim) Then ; teste la ligne ou la cellule
                    $fired += 1
                    ContinueLoop ; passe à la ligne suivante
                EndIf
                For $j = 0 To $cols - 1
                    $temp[$i - $fired][$j] = $_array[$i][$j]
                Next
            Next
            If UBound($_array) - $fired < 1 Then
                Dim $temp[1][$cols]
            Else
                ReDim $temp[UBound($_array) - $fired][$cols]
            EndIf
    EndSwitch
    $_array = $temp
    $temp = ""
    Return 1
EndFunc   ;==>_ArrayDeleteRows
; INTERNAL USE ONLY ===============
Func _TestRow($_text, $s_string, $t_fullstring, $t_delim)
  $ts_string = StringSplit($s_string, $t_delim)
   For $i = 1 To $ts_string[0]
         If $ts_string[$i] = "" Then  
             If $t_fullstring = 1 Then
                   If StringInStr($_text, "||") Then Return 1     ; teste si case vide 
             Else                                     
                   If StringRegExpReplace($_text, '\||\s', "") = "" Then Return 1    ; teste si ligne vide
             EndIf
        Else    
             If $t_fullstring = 1 Then
                   If StringInStr($_text, "|" & $ts_string[$i] & "|") Then Return 1     ;  teste si case avec la string fullstring
             Else
                   If StringInStr($_text, $ts_string[$i]) Then Return 1   ; teste si ligne avec la string
             EndIf
        EndIf
  Next
EndFunc   ;==>_TestRow