Vérifier que les coefficients de 3 matrices sont entiers

Bonjour,

j'essaye de coder une fonction qui renverrait le max de trois matrice, pour chacun des coefficients

par exemple si mat1 = (1 2 1) mat2 = (3 0 1) et mat3 = (0 1 4) la fonction donnerait :

function(mat1, mat2, mat3) = (3 2 4)

Alors dans mon exemple j'ai mis des matrices avec une linge pour la lisibilité mais dans la réalité j'ai n lignes et n colonnes

J'ai réussi à coder ça de cette façon :

 Function matrixOfMax(mat1 As Range, mat2 As Range, mat3 As Range) As Variant

    Dim tempArray() 'need a temporary variable to build the result
    Dim i As Integer, j As Integer

    For i = 1 To mat1.Rows.Count
        For j = 1 To mat1.Columns.Count     
            tempArray(i, j) = Application.WorksheetFunction.Max(mat1(i, j), mat2(i, j), mat3(i, j)
        Next j
       Next i

       matrixOfMax=tempArray

Ce code marche. Seulement maintenant, j'aimerai renvoyer un message d'erreur si un des nombres de la matrice n'est pas un entier.

J'ai écris ça :

    
        For i = 1 To mat1.Rows.Count 
        For j = 1 To mat1.Columns.Count
             If mat1(i, j) - Int(mat1(i, j)) = 0 And mat2(i, j) - Int(mat2(i, j)) = 0 And mat3(i, j) - Int(mat3(i, j)) = 0 Then
                tempArray(i, j) = Application.WorksheetFunction.Max(mat1(i, j), mat2(i, j), mat3(i, j))
               Else
               MsgBox ("you must enter only integer value")
                End If
        Next j
        Next i
matrixOfMax = tempArray        

Le problème est qu'ici je vais avoir autant de fois le Msgbox qu'il y a de nombre non entiers dans mes 3 matrices

J'ai donc essayé avec deux Exit For :

        For i = 1 To mat1.Rows.Count 'we are using option base 1, so starting to browse at 1
        For j = 1 To mat1.Columns.Count
         If mat1(i, j) - Int(mat1(i, j)) = 0 And mat2(i, j) - Int(mat2(i, j)) = 0 And mat3(i, j) - Int(mat3(i, j)) = 0 Then
            tempArray(i, j) = Application.WorksheetFunction.Max(mat1(i, j), mat2(i, j), mat3(i, j))
            Else
            MsgBox ("you must enter only integer value")
            End If
        Exit For
        Next j
        Exit For
        Next i
matrixOfMax = tempArray        

Et là oui cool ça marche je n'ai qu'un seul Msgbox d'erreur ... mais la fonction principale ne marche plus et ne me renvoie dans ma matrice que le premier coefficient maximum des trois matrices en paramètres.

bonsoir,

une proposition

    For i = 1 To mat1.Rows.Count 'we are using option base 1, so starting to browse at 1
        For j = 1 To mat1.Columns.Count
            If mat1(i, j) - Int(mat1(i, j)) = 0 And mat2(i, j) - Int(mat2(i, j)) = 0 And mat3(i, j) - Int(mat3(i, j)) = 0 Then
                tempArray(i, j) = Application.WorksheetFunction.Max(mat1(i, j), mat2(i, j), mat3(i, j))
            Else
                'MsgBox ("you must enter only integer value")
                j = 9000000000# 'force exit of loop j
                i = 9000000000# 'force exit of loop i
            End If
        Next j
    Next i
    If i >= 9000000000# Then
        matrixOfMax = CVErr(xlErrValue)
    Else
        matrixOfMax = tempArray
    End If
        

Bonsoir

si vous écrivez :

For i = 1 to 100
    If Cells(i,1)="LouReeD" Then Cells(i,1) = "LRD"
    Exit For
Next i

Alors la boucle tourne qu'une fois. Le Exit For devrait être lié à une condition.

Par exemple dans votre fonction, une variable Faute As Boolean

puis au lieu du MSGBOX vous mettez :

Faute = True

Et sur les deux Exit For :

If Faute Then Exit For

et en fin de fonction :

If Faute Then
    MSGBOX ("Vous devez entrer que des nombres entiers")
Else
    matrixOfMax = tempArray
End If

Disons que sur le papier ça devrait marcher...

@ bientôt

LouReeD

Bonsoir h2so4 !

@ bientôt

LouReeD

Merci H2SO4 tout fonctionne parfaitement

je vais tester quand même la solution de Lou Reed pour voir si je comprends tout bien

bonsoir,

je vais tester quand même la solution de Lou Reed pour voir si je comprends tout bien

tu aurais bien raison, elle est plus propre et plus compréhensible.

Merci h2so4 !

Venant de vous je le prend comme un compliment !

Il est vrai que j'évite depuis peu de faire "tourner les boucles" pour en sortir... Car quelque fois on a besoin de la valeur de sortie...

Mais j'avoue c'est rare !

Après vous avoir fait travailler comme un dieu, vous devez être déçu de la non sortie de l'application ?

En tout cas je ne me lasse pas de regarder ces monstres se déplacer vers ces héros...

Mais je peine un peu à assembler les divers morceaux que j'ai un peu partout !

@ bientôt

LouReeD

@loureed

vous devez être déçu de la non sortie de l'application ?

absolument pas déçu, ravi d'avoir pu t'aider sur ce coup et advienne que pourra. courage !

Merci !

@ bientôt

LouReeD

Rechercher des sujets similaires à "verifier que coefficients matrices entiers"