Chercher une plage de nombres binaires dans matrice binaire

Bonjour à tous,

comment faire pour que Excel trouve dans une matrice carrée (taille par exemple 300 lignes -300 colonnes) une sous matrice carrée de nombres binaires (ou plus simplement une suite de nombre binaires)

par exemple chercher dans une matrice 300-300 la sous matrice 4-4 suivante :

0000

0 1 1 0

0 1 1 1

0 0 0 1

Merci pour l'aide que vous pourrez m'apporter

sara

Bonjour sara79,

Une solution avec le code suivant :

Sub sousMatrice()
    Dim matrice, sousMat
    Dim lignInf As Long, lignSup&, colInf&, colSup&
    Dim lign&, col&, sousLign&, sousCol&, cpt&, nbLignSousMat&, nbColSousMat&
    Dim temoin As Boolean
    matrice = [a1].CurrentRegion.Value 'matrice entière
    sousMat = Application.InputBox("Veuillez sélectionner la sous-matrice à chercher :", "Sous-Matrice", , , , , , 8)
    nbLignSousMat = UBound(sousMat, 1)
    nbColSousMat = UBound(sousMat, 2)
    lignInf = LBound(matrice, 1)
    lignSup = UBound(matrice, 1) - nbLignSousMat + 1
    colInf = LBound(matrice, 2)
    colSup = UBound(matrice, 2) - nbColSousMat + 1

    For lign = lignInf To lignSup
        For col = colInf To colSup
            cpt = 0
            For sousLign = 1 To nbLignSousMat
                For sousCol = 1 To nbColSousMat
                    If matrice(lign + sousLign - 1, col + sousCol - 1) <> sousMat(sousLign, sousCol) Then temoin = True: Exit For
                    If matrice(lign + sousLign - 1, col + sousCol - 1) = sousMat(sousLign, sousCol) Then cpt = cpt + 1
                Next sousCol
                If temoin Then temoin = False: Exit For
            Next sousLign
            If cpt = nbLignSousMat * nbColSousMat Then Cells(lign, col).Resize(nbLignSousMat, nbColSousMat).Interior.Color = vbMagenta
        Next col
    Next lign
End Sub

Edit : code et fichier modifié pour prendre en compte n'importe quelle taille de sous-matrice

merci beaucoup

je vais l'essayer et je vous tiens au courant...maintenant je comprends mieux pourquoi je n'y arrivais pas puisqu'il fallait programmer...et là je n'ai aucune compétence...

c'est super gentil...merci encore...

sara

-- il y a moins d’une minute --

Bonjour,

j'ai testé le programme et cela fonctionne très bien !

Merci encore

Sara

Bonjour,

Le programme que vous m'avez communiqué fonctionne très bien mais j'ai juste un souci concernant la partie du programme qui cherche la sous matrice. Parfois les dimensions de la sous matrice varient. Serait-il possible de me dire comment créer à ce moment du programme une boite de dialogue qui tiennent compte des dimensions de la sous matrice.

j'espère avoir été précise dans ma demande

sara

Bonjour sara,

Autant pour moi, c'est juste un oubli. J'ai modifié le fichier et le code dans mon post précédent.

Bonjour,

j'ai testé la macro et effectivement, maintenant elle prend bien en compte une sous matrice de dimension différente. Je vous en remercie.

En revanche, j'ai un autre problème concernant la matrice sur laquelle je recherche la sous matrice (ie la matrice entière). Initialement, je vous avais demandé un programme pour une matrice carrée or il se trouve que j'ai plus de travail sur des matrices pas systématiquement carrées.

Serait-il possible de réintroduire cela dans le programme. que la recherche se fasse sur des matrices de dimensions différentes.

J'espère avoir été précise dans ma demande.

Sara

Bonjour sara,

En théorie, la macro marche quelque soit la taille de la matrice (si elle est plus grande que la sous-matrice du moins).. J'ai essayé en rajouté 2 colonnes et ça marche.

Veille à ce que toutes les cases de la matrice soient remplies et qu'il n'y a pas de données "autour". Sinon, envoie -le fichier qui fait défaut pour que je regarde.

Bonjour,

effectivement je me suis un peu compliquée l'exercice et j'utilisais mal la macro. Maintenant j'arrive à l’utiliser très bien pour tous les formats de matrice.

Pourrais je vous demander sans abuser, s'il est possible de créer une ligne de code qui me permette de savoir si des plages ont été ou non trouvées car je manipule des matrices très longues jusqu'à 10000 lignes-colonnes voire plus et sur plusieurs analyses cela fait lourd de balayer à chaque fois la matrice pour retrouver les sous matrices spécifiées.

et par ailleurs comme je bascule sur d'autres coloris serait-il possible d'entourer les sous matrices ainsi trouvées par une bordure rouge pour que je puisse les trouver quand je change de coloris.

J'espère ne pas avoir été trop exigeante dans ma demande et suffisamment claire.

Merci beaucoup pour votre aide.

Sara

Bonjour sara,

sara79 a écrit :

s'il est possible de créer une ligne de code qui me permette de savoir si des plages ont été ou non trouvées

Il faut que tu illustres ta demande. C'est-à-dire le résultat que tu souhaites obtenir (ex : afficher un message qui te dit que la matrice sélectionnée n'a pas été trouvée ?...)
sara79 a écrit :

et par ailleurs comme je bascule sur d'autres coloris serait-il possible d'entourer les sous matrices ainsi trouvées par une bordure rouge pour que je puisse les trouver quand je change de coloris.

ça c'est possible.
sara79 a écrit :

J'espère ne pas avoir été trop exigeante dans ma demande et suffisamment claire.

Y'a pas de souci !

Bonjour,

Il faut que tu illustres ta demande. C'est-à-dire le résultat que tu souhaites obtenir (ex : afficher un message qui te dit que la matrice sélectionnée n'a pas été trouvée ?...)

oui il s'agit bien d'un message qui me dirait

  • soit que des cellules ont bien été trouvées
  • soit que la recherche n'a pas aboutie.

Cela me permettrait de gagner du temps lorsque j'ai une multitude de matrices volumineuses à traiter..

Je vous remercie de votre aide qui est très précieuse pour moi et me permet d'avancer dans ce travail de recherche.

Sara

Bonjour sara,

Regarde voir si ça correspond à peu près à ce que tu veux :

bonjour,

SVP, ne m'oubliez pas !!!

j'ai vraiment besoin d'une réponse à mon précédent message.

SAra

Bonjour Sara,

Tu n'as pas vu mon message précédent ? Il est en deuxième page.

Bonjour,

merci merci merci merci infiniment...je suis ravie...et effectivement je n'avais pas vu qu'il y avait une deuxième page dans le forum...c'est dire comme l'informatique et moi ça fait 2 !!

Je vous remercierai jamais assez pour votre formidable et très efficace aide.

sara

Bonjour,

Il y a 10 ans vous m'aviez aidé pour retrouver un groupe de nombres binaires dans une matrice et je vous en remercie :)

Aujourd'hui, j'aimerais reprendre la matrice mais elle ne fonctionne plus soit parce qu'il s'agit d'excel qui a évolué soit parce que mon fichier est différent (matrice plus grande).

Pourriez-vous m'aider à nouveau pour obtenir la même chose c'est-à-dire rechercher un sous ensemble de nombre binaire {0;1} dans une matrice plus large de nombre binaires.

Je vous joins le fichier tel qu’il existe actuellement (matrice binaire.zip) et la macro créée à l’époque qui s'intitule "exemple-recherche-matrice v3.xlsm".

Je vous remercie de votre aide :)

Sarah

4matrice-binaire.zip (947.95 Ko)
Rechercher des sujets similaires à "chercher plage nombres binaires matrice binaire"