IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Permaculture - Exploiter un tableau d'associations entre les différentes espèces végétales [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut Permaculture - Exploiter un tableau d'associations entre les différentes espèces végétales
    Bonjour,

    J'ai un tableau de permaculture (que l'on peut retrouver facilement en image sur google avec les mots-clés "potager associations"), qui permet de montrer quelle plante va avec quelles autres, et lesquelles chacune doit éviter.

    Mais visuellement, ce tableau ne permet de voir que des paires d'associations (c'est positif d'associer betteraves et ail, et c'est négatif d'associer echalottes et choux). Mais si je veux voir quelles sont les associations de groupe possibles, là ça devient vite compliqué voir impossible. Par exemple je peux voir que les betteraves vont bien avec ail celeri choux echalottes epinards laitue (et bien d'autres) mais si je veux associer tout ça, je dois verifier que chaque membre va bien avec tous les autres membre... et sur ce genre de tableau c'est pas du tout pratique.

    J'ai donc recopié le tableau en mettant un + à chaque association bénéfique, un - à chaque association nefaste, et un vide à chaque association neutre.
    Et je me creuse la tête pour trouver un code qui permettrait de mettre en forme des listes de groupes d'associations, des plus nombreuses aux moins nombreuses, avec ou sans les associations neutres, etc.

    Si l'un de vous a une idée lumineuse je suis preneur car je ne vois que la recherche "manuelle" de mon côté

    Merci à tous!

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Bonjour,

    Si l'un de vous a une idée lumineuse je suis preneur car je ne vois que la recherche "manuelle" de mon côté
    Tout simplement un algo qui fasse toutes les recherches "manuelles" à ta place et te récapitule l'information dans une seule cellule

    Une proposition ci-jointe
    Avec une feuille data qui reprend en colonne A la concaténation de deux plante, et en B le résultat de l'association (positif, négatif, ou neutre)
    Et une feuille asso avec en colonne A le résultat des associations (calculé par la macro) et dans les colonnes suivantes (autant que nécessaire) la liste des plantes

    Attention toute les associations possibles doivent être renseignées dans la feuille data, sans quoi la macro risque de renvoyer une erreur sur la ligne avec le vlookup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Sub asso()
    Dim linge As Long, col1 As Long, col2 As Long, res As String
    With Sheets("asso")
    For ligne = 2 To .Range("B" & Rows.Count).End(xlUp).Row
        res = ""
        For col1 = 2 To .Cells(ligne, 2).End(xlToRight).Column - 1
            For col2 = col1 + 1 To .Cells(ligne, 2).End(xlToRight).Column
        Debug.Print .Cells(ligne, col1).Value & .Cells(ligne, col2).Value
            res = res & WorksheetFunction.VLookup(.Cells(ligne, col1).Value & .Cells(ligne, col2).Value, Sheets("data").Range("A:B"), 2, 0)
            Next col2
        Next col1
    .Cells(ligne, 1) = res
    Next ligne
    End With
    End Sub
    Fichiers attachés Fichiers attachés

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Bonjour,
    Merci de la réponse...
    Par contre peut-être que je n'ai pas bien saisi l'idée mais de mon côté ça ne marche pas.
    J'ai saisi "manuellement" une partie des concatenations dans data colonne A, en mettant manuellement le resultat colonne B. Mis la liste des plantes dans asso ligne 1. Mais quand je lance la macro rien ne se passe...

    Mais dans tous les cas ça me paraît assez "manuel" cette méthode, et surtout ça ne donne pas les différents groupes possibles. Par exemple si j'ai bien compris ça mettrait +-+ +- quand je voudrais qu'il n'affiche que + ++ (et encore, je voudrais en réalité qu'il mette "plante A plante C plante F")

    ...j'espère que mes explications ne sont pas trop floues...

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Citation Envoyé par mosar3 Voir le message
    Mais quand je lance la macro rien ne se passe...
    Normalement (en tous cas c'est comme ça que ça se passe chez moi) la macro affecte les valeurs +,-,vide aux association de plante que tu lui met, et donc modifie le résultat de la première colonne

    et surtout ça ne donne pas les différents groupes possibles. Par exemple si j'ai bien compris ça mettrait +-+ +- quand je voudrais qu'il n'affiche que + ++ (et encore, je voudrais en réalité qu'il mette "plante A plante C plante F")
    Je pense que j'ai mal compris ton problème, pour moi c'était toi qui proposait des associations de plantes et tu voulais savoir si elles étaient bonnes, alors qu'en fait c'est l'inverse tu voudrais avoir toutes les associations possibles de plantes où il n'y aurait que des +

    Combien as-tu de plante différente en tout ? Il est peut être possible d'envisager un dénombrement de tout les cas possible, puis de trier en fonction du nombre de +

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Il y a 35 plantes en tout. Je mets le fichier en PJ ce sera plus simple: L'idée c'est que le tableau présente déjà toutes les associations potentielles, mais seulement par paires.

    Et j'aimerais un algorithme qui fasse des listes d'associations de groupes, plus ou moins nombreuses, et plus ou moins vertueuse (par ex que des +, puis des + et des vides).

    Ca donnerait par ex 10 groupes à 3 membres, 7 groupe à 4 membres, 3 groupes à 5 membres, 1 groupe à 6 membres. (avec et sans les vides)
    Comme ça on verrait tout de suite les meilleures associations possibles.

    Association permaculture.xlsx

    J'espère que c'est moins flou
    Merciii

  6. #6
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 138
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 138
    Par défaut
    Bonjour,
    Citation Envoyé par mosar3 Voir le message
    Comme ça on verrait tout de suite les meilleures associations possibles.
    Pas sûr d'avoir compris tout à fait ce que tu veux mais je te propose ton tableau avec les bonnes et mauvaises associations regroupées avec une fonction personnalisée.

    à toi de nous dire si cela te convient.
    Fichiers attachés Fichiers attachés

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Bonjour Anasecu,
    Non je ne me suis toujours pas bien fait comprendre.

    En fait si j'ai des plantes A,B,C,D,E mon tableau m'indique que A s'associe bien avec B et C, neutre avec D, et mal avec E.
    Mais je ne peux pas en conclure d'associer A avec B et C (et éventuellement D), car je dois vérifier que B, C et D sont compatibles entre eux.
    En effet, mon tableau m'indique aussi que B s'associe bien avec A, mal avec C et D et neutre avec E.
    Il m'indique aussi que C s'associe bien avec A, mal avec B, bien avec D et neutre avec E.
    Et enfin que D est neutre avec A, s'associe mal avec B, bien avec C et mal avec E.

    Bref vous voyez l'idée, avec 35 plantes ça fait un joli mic-mac, avec tout un tas d'associations possibles
    Et l'idée serait de lister ces associations, en triant en fonction du nombre de membres, et éventuellement du nombre de "neutres"

    Merci

  8. #8
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 138
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 138
    Par défaut
    Bonjour mosar3, le forum,
    Citation Envoyé par mosar3 Voir le message
    Bref vous voyez l'idée, avec 35 plantes ça fait un joli mic-mac, avec tout un tas d'associations possibles
    Et l'idée serait de lister ces associations, en triant en fonction du nombre de membres, et éventuellement du nombre de "neutres"
    J'espère que j'ai mieux compris ton idée et que j'ai organisé un peu ton micmac sur une autre feuille qui se met à jour lorsque elle est affichée.
    à toi de nous dire si c'est ce que tu attendais.

    Ces associations sont tout de même pas toujours judicieuses me semble-t-il,
    par exemple "Haricots / Épinards / Mâche" me semble peu réaliste car les saisons de culture ne sont pas vraiment les mêmes,
    car si le haricot aime la chaleur ce n'est pas le cas de l'épinard et de la mâche.

    Si certains veulent voir le code, il suffit de demander mais il est spécifique pour ce classeur même s'il est évolutif.
    Fichiers attachés Fichiers attachés

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 004
    Par défaut
    Salut

    En fait ce que tu cherches à faire c'est de partir de l'ail par exemple (je ne tiens pas compte des associations neutres)

    Ail + Betterave = +
    Ail + Carottes = +
    Carotte + Betterave = -
    Ail + Choux = +
    Choux + Betterave = +
    Choux + Carotte = +
    Tu en déduis que tu peux faire
    Ail + Choux + Betterave ou Ail + Choux + Carotte mais pas Ail + Choux + Betterave + Carotte

    C'est un système itératif mais il sort toujours un très grand nombre de données de ce genre de structure et je trouve ça très dur à afficher pour que ce soit visuellement utilisable.
    Il faut, à mon avis, te donner des contraintes de départ. Par exemple, je veux mettre de l'Ail, des carottes, de la betterave, du choux, ... Pour organiser mon jardin j'ai x parcelles différentes.
    Et la tu mets en place un code qui regarde les associations possibles sur cette liste et qui les regroupent par parcelles pour utiliser au mieux chaque parcelle en évitant les associations négatives et en favorisant les association positives. De ce type de code peut sortir différentes organisations qui respect les 2 critères (sélection de légumes et nombre de parcelles)

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Bonjour à vous deux, oui c'est bien cela que je cherche à faire, merci!!

    Bien vu pour vos remarques, en effet certaines associations ne sont pas pertinentes , c'est pourquoi je souhaite pouvoir mettre à jour ce tableau en fonction d'autres recherches et observations que je ferai... L'idée c'est d'avoir une base de travail généraliste qui puisse ensuite s'adapter aux cas particuliers.


    Par contre je crois qu'il y a quelques bugs avec le code et/ou les formules :
    Il y a quelques doublons (notamment dans les associations compatibles à 13 membres) ... Et quelques anomalies par exemple la première association bénéfique comprend 11 membres dont ail et basilic alors qu'ils ne sont pas en association bénéfique... :/
    Et j'ai fait un test aussi en rajoutant un élément bénéfique avec tous et ça s'est pas bien affiché...

    Alors j'ai jeté un oeil au code mais trop poussé pour que je comprenne
    Mais dans l'idée c'est bien un truc comme ça que je cherche, qui se mette en jour en modifiant la base de données ça serait trop!!

  11. #11
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir

    J'ai supprimé une proposition qui n'était pas optimisée.

    Ci-après nouveau code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    Option Explicit
     
    Private Const N As Integer = 36 'Nbre de plantes +1
     
    Sub Main()
    Dim Nb As Integer, i As Integer, j As Integer, k As Integer
    Dim myDico As Object
    Dim Tmp As String
    Dim Tb, Tdc, RES()
    Dim Na As Long
     
    Application.ScreenUpdating = False
    Feuil1.Range("AN:AM").ClearContents
     
    ReDim RES(1 To 2, 1 To 1)
    RES(1, 1) = "Associations plantes"
    RES(2, 1) = "Nbre de plantes"
     
    Set myDico = CreateObject("Scripting.Dictionary")
    INI myDico, Tb
     
    For i = 2 To N
        k = 1
        Do
            Tmp = Tb(i, 1) & ";"
            Tdc = myDico(Tb(i, 1))
            If IsArray(Tdc) Then
                Nb = UBound(Tdc)
                For j = k To Nb
                    If TROUVE(myDico, Tmp, Tdc(j)) Then
                        Tmp = Tmp & Tdc(j) & ";"
                        ECRIRE RES, Tmp
                    End If
                Next j
            End If
            k = k + 1
        Loop While k <= Nb
    Next i
    Set myDico = Nothing
     
    Na = UBound(RES, 2)
    Feuil1.Range("AN1").Resize(Na, 2).Value = Application.Transpose(RES)
    MsgBox "Teminé..." & Chr(10) & Na & " associations"
    End Sub
     
    Private Sub INI(Dico As Object, Tbl)
    Dim i As Integer, j As Integer, k As Integer
    Dim Neutre As Boolean, B As Boolean
    Dim Tmp() As String
     
    Tbl = Feuil1.[A1].Resize(N, N)
    Neutre = MsgBox("Voulez vous associer les plantes neutres?", vbYesNo) = vbYes
    For i = 2 To N - 1
        For j = i + 1 To N
            If Neutre Then
                B = Tbl(i, j) <> "-"
            Else
                B = Tbl(i, j) = "+"
            End If
            If B Then
                k = k + 1
                ReDim Preserve Tmp(1 To k)
                Tmp(k) = Tbl(1, j)
            End If
        Next j
        Dico.Add Tbl(i, 1), Tmp
        k = 0
        ReDim Tmp(1 To 1)
    Next i
    End Sub
     
    Private Function TROUVE(ByVal Dict As Object, ByVal ST As String, ByVal Plante As String) As Boolean
    Dim i As Integer, j As Integer
    Dim B As Boolean
    Dim Tbl, Tdc
     
    Tbl = Split(ST, ";")
    For i = 0 To UBound(Tbl) - 1
        Tdc = Dict(Tbl(i))
        B = False
        If Tdc(1) <> "" Then
            For j = 1 To UBound(Tdc)
                If Tdc(j) = Plante Then
                    B = True
                    Exit For
                End If
            Next j
        End If
        TROUVE = B
        If Not B Then Exit Function
    Next i
    End Function
     
    Private Sub ECRIRE(Tbl, ByVal ST As String)
    Dim m As Long
     
    m = UBound(Tbl, 2) + 1
    ReDim Preserve Tbl(1 To 2, 1 To m)
    Tbl(1, m) = Left(ST, Len(ST) - 1)
    Tbl(2, m) = Len(ST) - Len(Replace(ST, ";", ""))
    End Sub
    Fichier Permaculture - v3.xlsm

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Wouah c'est vraiment impressionnant, merci beaucoup!

    Si je peux me permettre je crois que c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Range("AN:AO").ClearContents
    Au lieu de AN:AM

    Malheureusement je ne comprends pas suffisamment pour me m'approprier le code...
    Si je rajoute des espèces c'est sensé marcher aussi? Car je vois qu'au début tu déclare N=36 en fonction du nombre de plantes...

    En l'état c'est vraiment presque parfait! Il y a peut être une amélioration à voir si c'est facilement faisable: il s'agirait de rajouter une option ou bouton (ou même de le faire par défaut) qui supprimerait les éléments qui seraient inclus dans une série plus grande. Par exemple si j'ai :
    • Carottes;Choux;Epinards;Feves;Haricots;Laitue
    • Carottes;Choux;Epinards;Feves;Haricots
    • Carottes;Choux;Epinards;Feves


    N'afficher que la première? Car avec les neutres ça peut vite devenir énorme

    En tout cas en l'état c'est déjà génial merci mille fois!!!

  13. #13
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une proposition (une peux longue pour les neutres)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    Option Explicit
     
    Private Const N As Integer = 36                       'Nbre de plantes +1
     
    Sub Main()
    Dim Nb As Integer, i As Integer, j As Integer, k As Integer
    Dim myDico As Object
    Dim Tmp As String
    Dim Tb, Tdc, RES()
    Dim Na As Long
     
    Application.ScreenUpdating = False
    Feuil1.Range("AN:AO").ClearContents
     
    ReDim RES(1 To 2, 1 To 1)
    RES(1, 1) = "Associations plantes"
    RES(2, 1) = "Nbre de plantes"
     
    Set myDico = CreateObject("Scripting.Dictionary")
    INI myDico, Tb
     
    For i = 2 To N - 1
        k = 1
        Do
            Tmp = Tb(i, 1) & ";"
            Tdc = myDico(Tb(i, 1))
            Nb = UBound(Tdc)
            For j = k To Nb
                If TROUVE(myDico, Tmp, Tdc(j)) Then
                    Tmp = Tmp & Tdc(j) & ";"
                    ECRIRE RES, Tmp
                End If
            Next j
            k = k + 1
        Loop While k <= Nb
    Next i
    Set myDico = Nothing
     
    Na = UBound(RES, 2)
    Feuil1.Range("AN1").Resize(Na, 2).Value = Application.Transpose(RES)
    MsgBox "Teminé..." & Chr(10) & Na - 1 & " associations..."
    End Sub
     
    Private Sub INI(Dico As Object, Tbl)
    Dim i As Integer, j As Integer, k As Integer
    Dim Neutre As Boolean, B As Boolean
    Dim Tmp() As String
     
    Tbl = Feuil1.[A1].Resize(N, N)
    Neutre = MsgBox("Voulez vous associer les plantes neutres?", vbYesNo) = vbYes
    For i = 2 To N - 1
        For j = i + 1 To N
            If Neutre Then
                B = Tbl(i, j) <> "-"
            Else
                B = Tbl(i, j) = "+"
            End If
            If B Then
                k = k + 1
                ReDim Preserve Tmp(1 To k)
                Tmp(k) = Tbl(1, j)
            End If
        Next j
        Dico.Add Tbl(i, 1), Tmp
        k = 0
        ReDim Tmp(1 To 1)
    Next i
    End Sub
     
    Private Function TROUVE(ByVal Dict As Object, ByVal ST As String, ByVal Plante As String) As Boolean
    Dim i As Integer, j As Integer
    Dim B As Boolean
    Dim Tbl, Tdc
     
    Tbl = Split(ST, ";")
    For i = 0 To UBound(Tbl) - 1
        Tdc = Dict(Tbl(i))
        B = False
        If Tdc(1) <> "" Then
            For j = 1 To UBound(Tdc)
                If Tdc(j) = Plante Then
                    B = True
                    Exit For
                End If
            Next j
        End If
        TROUVE = B
        If Not B Then Exit Function
    Next i
    End Function
     
    Private Sub ECRIRE(Tbl, ByVal ST As String)
    Dim nST As Integer, nTbl As Integer, nC As Integer, j As Integer, k As Integer, kST As Integer
    Dim Ajout As Boolean, Ok As Boolean
    Dim m As Long, i As Long
    Dim cST, cTbl
     
    m = UBound(Tbl, 2)
    If m > 1 Then
        cST = Split(ST, ";")
        For i = 2 To m
            cTbl = Split(Tbl(1, i), ";")
            nST = UBound(cST) - 1
            nTbl = UBound(cTbl)
            kST = 0
            For j = 0 To nST
                For k = 0 To nTbl
                    Ok = cST(j) = cTbl(k)
                    If Ok Then
                        kST = kST + 1
                        Exit For
                    End If
                Next k
                If Not Ok Then Exit For
            Next j
            If Ok Then Exit For
        Next i
    End If
     
     
    If kST < nST + 1 Or nST = 0 Then
        If kST = nTbl + 1 And nTbl > 0 Then
            m = i
            If Not Ok Then m = m - 1
        Else
            m = m + 1
            ReDim Preserve Tbl(1 To 2, 1 To m)
        End If
     
        Tbl(1, m) = Left(ST, Len(ST) - 1)
        Tbl(2, m) = Len(ST) - Len(Replace(ST, ";", ""))
    End If
    End Sub

  14. #14
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Autre idée, faire un double-clic sur la plante de votre choix(que se soit en ligne ou en colonne), on affiche alors que les plantes marquées d'un "+" dans la même ligne ou colonne.

    Le fichier
    Pièce jointe 524552

    Les codes utilisés:
    Dans le module de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Plante = Target.Address
        If Target.Column = 1 And Target <> "" Then
            Lig = Target.Row
            Range(Target.Address).Interior.Color = RGB(0, 0, 255)
            Range(Target.Address).Font.Color = RGB(255, 255, 255)
            Masquage_Colonnes
        ElseIf Target.Row = 1 And Target <> "" Then
            Col = Target.Column
            Range(Target.Address).Interior.Color = RGB(0, 0, 255)
            Range(Target.Address).Font.Color = RGB(255, 255, 255)
            Masquage_Lignes
        End If
    End Sub
    Dans le module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Public Lig As Long, Col As Long
    Public Plante As String
     
    Sub Masquage_Colonnes()
        Application.ScreenUpdating = False
        Tout_Afficher
        DerCol = [A1].End(xlToRight).Column
        For i = 2 To DerCol
            If Cells(Lig, i) = "" Or Cells(Lig, i) = "-" Then
                Columns(i).EntireColumn.Hidden = True
            Else
                Columns(i).EntireColumn.Hidden = False
            End If
        Next i
        Range(Plante).Interior.Color = RGB(0, 0, 255)
        Range(Plante).Font.Color = RGB(255, 255, 255)
    End Sub
     
    Sub Masquage_Lignes()
        Application.ScreenUpdating = False
        Tout_Afficher
        DerLig = [A1].End(xlDown).Row
        For i = 2 To DerLig
            If Cells(i, Col) = "" Or Cells(i, Col) = "-" Then
                Rows(i).EntireRow.Hidden = True
            Else
                Rows(i).EntireRow.Hidden = False
            End If
        Next i
        Range(Plante).Interior.Color = RGB(0, 0, 255)
        Range(Plante).Font.Color = RGB(255, 255, 255)
    End Sub
     
    Sub Tout_Afficher()
        Cells.EntireColumn.Hidden = False
        Cells.EntireRow.Hidden = False
     
        Range("Tableau3[#Headers]").Interior.ThemeColor = xlThemeColorAccent1
        Range("Tableau3[#Headers]").Font.ThemeColor = xlThemeColorDark1
        Range("Tableau3[Plantes]").Interior.TintAndShade = 0
        Range("Tableau3[Plantes]").Font.ThemeColor = xlThemeColorLight1
    End Sub
    Cdlt

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Ok merci beaucoup à tous ceux qui se sont penchés sur la question.
    Au final je retiens la dernière proposition de Mercatog qui correspond parfaitement à ce que je cherchais.
    Encore un grand merci, je mets résolu!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MCD] Héritage, association entre les sous-types
    Par Sandro Munda dans le forum Schéma
    Réponses: 31
    Dernier message: 26/01/2011, 15h35
  2. les methodes et les associations entre les classes
    Par zin_rbt dans le forum Diagrammes de Classes
    Réponses: 1
    Dernier message: 24/05/2010, 14h41
  3. [Turbo Pascal] Tableau de distances entre les villes
    Par amina815 dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 27/04/2009, 20h47
  4. Réponses: 2
    Dernier message: 17/06/2008, 12h14
  5. Association entre les table (débute)
    Par dydy77 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/06/2008, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo