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 :

Problème de Noeuds


Sujet :

Macros et VBA Excel

  1. #41
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    mais aussi supérieures 4, par exemple avec les 5 lignes
    Et à quoi ai-je fait allusion plus haut , sinon à cela même, d'après toi ? --->>
    Le nombre de lignes est un problème vraiment mineur, si tu réfléchis bien à la manière astucieuse de traiter in fine
    Je continue à vous "regarder" réfléchir ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  2. #42
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    Bonjour,
    Nom : Capture3.PNG
Affichages : 125
Taille : 46,2 Ko

    attention ce schéma a été modifié "EA" "EF" "EC"

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  3. #43
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Schéma très explicite avec les différents types de paramètres
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  4. #44
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour mjpmjp
    Je te suggère de ne pas t'arrêter à 4, mais d'aller jusqu'au bout -->> dans ton exemple : 6 chaînes de 5 éléments
    EHAGD
    EHFGD
    EHCGD
    EBAGD
    EBFGD
    EBCGD

    Les chaînes suivantes acceptables :
    HAGD
    HFGD
    HCGD
    BAGD
    BFGD
    BCGD

    sont DEJA, chacune, une des combinaisons de 4 parmi 5 de l'une des chaînes précédentes de 5 éléments. Inutile de les extraire (elles le seront in fine)
    Il est par ailleurs inutile d'aller au delà de la seconde ligne puisque 5 - (4-1) = 2

    Opération in fine :
    Pour chacune des 6 chaînes de 5 éléments : en extraire toutes les combinaisons possibles de 4 parmi 5 (et cette opération-là est, elle, facile, classique et super-connue).
    Amitiés
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #45
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    bonjour,
    voilà un brouillon , je bute sur la récursivité !!!

    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
     
     
    Private Sub Codage(OngletName As String, Lig As Single)
        For ColLig1 = 1 To 6
            '----- ligne A
            'test ligne 1
            If Cells(Lig, ColLig1).Value = "" Then
                'passe à ligne B ?
            End If
                LigneTab = LigneTab + 1
                ReDim Preserve TabCode(6, LigneTab)
                TabCode(ColLig1, LigneTab) = TabCode(ColLig1, Lig) & Cells(Lig, ColLig1).Value
     
            '----- ligne B
            For ColLig2 = 1 To 6
                'test ligne 2
                If Cells(Lig + 1, ColLig2).Value = "" Then
                    'passe à ligne B ?
                    Call Codage("Code2", Lig + 1)
                End If
                LigneTab = LigneTab + 1
                ReDim Preserve TabCode(6, LigneTab)
                TabCode(ColLig1, LigneTab) = TabCode(ColLig1, Lig) & Cells(Lig + 1, ColLig2).Value
     
            Next ColLig2
        Next ColLig1
    End Sub
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  6. #46
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    re,
    j'essaye de suivre mon schéma , c'est à dire de récupérer "EH" et "EB" pour ajouter la ligne suivante , ....

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  7. #47
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je regarde, je regarde ...
    Dernier indice (autrement je vais tout écrire et ne le veux pas) :
    Ta première boucle doit être de 1 à n - (4-1) (où n = le nombre de lignes)
    Vient ensuite non une récursivité "pure", mais l'appel en récursivité d'une autre procédure (j'appelle cela "récursivité batarde)
    Que (quels paramètres) passer à cette autre procédure ? Là est tout l'art

    Je continue à vous "regarder"
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #48
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    re,
    OK...mais j'ai mal au crane et en plus il neige

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  9. #49
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    et en plus il neige
    Ce n'est rien... Demande à un certain Barclay... Il criait partout, en 1956 "Il a neigé sur Hawaï"
    Alors ...

    Amitiés
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #50
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    hi Jacques,

    Vient ensuite non une récursivité "pure", mais l'appel en récursivité d'une autre procédure (j'appelle cela "récursivité batarde)
    un peu comme avec le Dir ?


    j'essai de comprendre aussi car je suis en terrain inconnu sur ce sujet
    Je viens de commencer par l'exemple que tu as donné dans un post pour essayer de comprendre et suivre le cheminement
    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
    Sub test()
        DL = Cells(Rows.Count, 1).End(xlUp).Row
        VA = Application.Transpose(Range("A1:A" & DL).Value)
        For I = LBound(VA) To UBound(VA)
            VA(I) = Split(VA(I), " ")
        Next
    'VA = Array(Array(1, 2), Array(4, 3), Array("a", "b", "c")) ' --->> çà, c'est un array d'arrays
        ReDim resul(0) ' --->> sera un array de valeurs simples
            For k = 1 To UBound(VA)
                titi = VA(k)
                For h = 0 To UBound(titi)
                    resul(UBound(resul)) = titi(h)
                    ReDim Preserve resul(UBound(resul) + 1)
                Next
            Next
        ReDim Preserve resul(UBound(resul) - 1)
     
     ' preuve de la transformation --->> voilà le contenu de resul
      For j = 0 To UBound(resul)
        MsgBox resul(j)
      Next
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  11. #51
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Salut Ryu

    Ce serait là faire en vba une partie du mécanisme Javascript "piqué" sur la toile par le fiston du demandeur
    1) Ce n'est pas forcément le meilleur à choisir
    2) Un imitateur de Monet ne sera jamais un Monet. Un peintre de talent, par contre, se fera connaître. Et ce : même si son talent n'égalait pas celui de Monet.

    EDIT :
    un peu comme avec le Dir ?
    Pas tout-à-fait, mais il y a un peu de cela.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #52
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Mais qui est Robert ?
    pour l'instant je n'en connais qu'un et il se trouve en post #25, mais cela me semble étrange …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  13. #53
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    re,
    encore un petit brouillon , j'arrive à "EHA" et "EBA"

    les différences avec le précédant brouillon :
    boucle indéfinie "DO" non limitée à 6 colonnes (Control vertical par cells vide)
    un tablo Tmp qui sauve la ligne précédante
    remise à zero du tablo Code
    et réécriture avec la ligne suivante (pas terminé )

    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
     
     
    Private Sub Codage(OngletName As String, Lig As Single)
        Do 'boucle ligne A
            ColLig1 = ColLig1 + 1 'colonne -> limite = ""
            If Cells(Lig, ColLig1).Value = "" Then
                'sécurité (tmp)
                Exit Do
            End If
            LigneTab = LigneTab + 1
            ReDim Preserve TabCode(LigneTab)
            TabCode(LigneTab) = Cells(Lig, ColLig1).Value
            LigneTab = 1
            TabTmp = TabCode
            ReDim TabCode(1)
            Do 'boucle ligne B
                ColLig2 = ColLig2 + 1 'colonne -> limite = ""
                If Cells(Lig + 1, ColLig2).Value = "" Then
                    Call Codage("Code2", Lig + 1)
                    'sécurité (tmp)
                    Exit Do
                End If
                For n = 1 To UBound(TabTmp)
                    TabCode(LigneTab) = TabTmp(n) & Cells(Lig + 1, ColLig2).Value
                    LigneTab = LigneTab + 1
                    ReDim Preserve TabCode(LigneTab)
                Next n
            Loop 'ligne B
        Loop 'Ligne A
    End Sub
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  14. #54
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    A Ryu :
    Corrigé !
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  15. #55
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    re,
    Nom : Capture4.PNG
Affichages : 130
Taille : 4,7 Ko

    ce qui change ...
    la gestion du redim preserve pour éviter une ligne vide en fin de tablo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
               For n = 1 To UBound(TabTmp)
                    LigneTab = LigneTab + 1
                    ReDim Preserve TabCode(LigneTab)
                    TabCode(LigneTab) = TabTmp(n) & Cells(Lig + 1, ColLig2).Value
                Next n
    l'isolation de la partie haute de la lig = 1
    mais les problèmes restent à venir

    nouveau brouillon
    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
     
     
    Private Sub Codage(OngletName As String, Lig As Single)
        Do 'boucle ligne A
            ColLig1 = ColLig1 + 1 'colonne -> limite = ""
            If Cells(Lig, ColLig1).Value = "" Then
                'sécurité (tmp)
                Exit Do
            End If
     
            If Lig = 1 Then
                LigneTab = LigneTab + 1
                ReDim TabCode(LigneTab)
                TabCode(LigneTab) = Cells(Lig, ColLig1).Value
                LigneTab = 0
                TabTmp = TabCode
                ReDim TabCode(0)
            End If
     
            Do 'boucle ligne B
                ColLig2 = ColLig2 + 1 'colonne -> limite = ""
                If Cells(Lig + 1, ColLig2).Value = "" Then
                    LigneTab = 0
                    TabTmp = TabCode
                    ReDim TabCode(0)
                    Call Codage("Code2", Lig + 1)
                    'sécurité (tmp)
                    Exit Do
                End If
                For n = 1 To UBound(TabTmp)
                    LigneTab = LigneTab + 1
                    ReDim Preserve TabCode(LigneTab)
                    TabCode(LigneTab) = TabTmp(n) & Cells(Lig + 1, ColLig2).Value
                Next n
            Loop 'ligne B
        Loop 'Ligne A
    End Sub
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  16. #56
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Avec le code ci-dessous, il me manque les sauts de lettres comme par exemple EHAD EHA puis aller à D :
    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
     
    Type Tableau
     
        Valeur As String
        Ligne As Integer
        Niveau As Integer
     
    End Type
     
    Sub Test()
     
        Dim Tbl() As Tableau
        Dim Plage As Range
        Dim C_1 As Range
        Dim C_2 As Range
        Dim I As Integer
        Dim J As Integer
        Dim K As Integer
     
        'plage en feuille "Feuil1" à partir de A1
        With Worksheets("Feuil1")
     
            Set Plage = .Range(.Cells(1, 1), _
                        .Cells(.Cells.Find("*", .[A1], -4123, , _
                        1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
                        2, 2).Column))
     
        End With
     
        For Each C_1 In Plage
     
            If C_1.Value <> "" Then
     
                For Each C_2 In Plage
     
                    If C_2.Value <> "" Then
     
                        If C_1.Address = C_2.Address Then
     
                            I = I + 1
                            ReDim Preserve Tbl(1 To I)
                            Tbl(I).Valeur = C_2.Value: Tbl(I).Ligne = C_2.Row
                            K = K + 1: Tbl(I).Niveau = K
     
                        End If
     
                        If C_2.Row > C_1.Row Then
     
                            For J = UBound(Tbl) To 1 Step -1
     
                                If Tbl(J).Ligne < C_2.Row And Tbl(J).Niveau = Tbl(I).Niveau Then
     
                                    If C_2.Row - Tbl(J).Ligne > 1 Then Exit For
     
                                    I = I + 1
                                    ReDim Preserve Tbl(1 To I)
                                    Tbl(I).Valeur = Tbl(J).Valeur & C_2.Value: Tbl(I).Ligne = C_2.Row: Tbl(I).Niveau = K
     
                                End If
     
                            Next J
     
                        End If
     
                    End If
     
                Next C_2
     
            End If
     
        Next C_1
     
        'résultat en Feuille "Feuil2" et colonne A
        For I = 1 To UBound(Tbl)
     
            Worksheets("Feuil2").Cells(I, 1).Value = Tbl(I).Valeur
     
        Next I
     
    End Sub

  17. #57
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Theze
    Le chemin/mécanisme que tu as choisi n'est pas le plus astucieux (relis ce que j'en ai dit plus haut. Ne "saute" rien et traite in fine)
    Si, nonobstant, tu tiens ce mécanisme-là : rappelle-toi le fonctionnement :
    - de certains jeux, dont le "casse-tête du cube"
    - de certaines calculatrices à manivelle
    - des bouliers également, d'une certaine manière un peu différente, mais ...
    Amitiés

    EDIT : Ah oui (j'avais oublié cela) : rappelle-toi également comment fonctionnaient les systèmes mécanographiques, mais également certains "classeurs à la GeoTrouveTout", fiches dotées de trous et tiges diverses (les fiches tombaient selon les tiges tirées).


    EDIT 2 : tiens, dans le genre "rigolo"
    On pourrait parfaitement se servir ainsi d'une feuille de calcul Excel :
    - en son "centre" (je veux dire par là suffisamment éloigné de la colonne A) . Disons donc en colonne X : ma plage de lignes et colonnes d'éléments
    - à chaque itération et chaque fois que possible : on décale vers la gauche d'une colonne la ligne L suivante
    -- et ainsi de suite pour chaque ligne L+1, L+2, etc ...
    --- puis on revient à la ligne L et on recommence de la même manière, mais après avoir préalablement remis en leur état originel les lignes L+, ... L + n
    A chaque opération : on lit ce que l'on a de différent de "" en colonne X

    Ce serait amusant, non ? (juste histoire de rigoler, hein ...)
    ---
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  18. #58
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    bonjour,
    Nom : Capture5.PNG
Affichages : 117
Taille : 9,2 Ko

    ce qui est nouveau :
    un nouveau tablo : TabResult qui enregistre tous les codes "fini"
    pour rappel , TabCode construit le code et TabTmp fait la liaison entre 2 lignes

    le passage d'argument optionnel FinCode et NewCode true/false
    FinCode : indique qu'il manque un dernier élément pour finir le code
    NewCode : le code "fini" est "suivi" comme new code à enregistrer dans TabResult

    est à revoir
    la partie haute : ligne A

    à suivre
    "EA" "EF" "EC"
    et
    la ligne 2 : "H" "B" , qui est positionnée Ligne A en remplacement de la ligne 1 : "E"


    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
     
    Private Sub Codage(OngletName As String, Lig As Single, Optional FinCode As Boolean = False, Optional NewCode As Boolean = False)
        Do 'boucle ligne A
            ColLig1 = ColLig1 + 1 '##### transmettre ColLig1 par appel #####
            If Cells(Lig, ColLig1).Value = "" Then 'colonne -> limite = ""
                Exit Do 'sécurité (tmp)
            End If 'limite A = ""
     
            If Lig = 1 Then
                LigneTab = LigneTab + 1
                ReDim TabCode(LigneTab)
                TabCode(LigneTab) = Cells(Lig, ColLig1).Value
                LigneTab = 0
                TabTmp = TabCode
                ReDim TabCode(0)
                ReDim TabResult(0) '### emplacement temporaire , à modifier absolument ###
            End If 'Lig = 1
     
            Do 'boucle ligne B
                ColLig2 = ColLig2 + 1
                If Cells(Lig + 1, ColLig2).Value = "" Then 'colonne -> limite = ""
     
                    'sauvegarde code
                    If FinCode Then
                        If NewCode Then
                            FinTabResult = UBound(TabResult)
                            ReDim Preserve TabResult(UBound(TabResult) + UBound(TabCode))
                            For n = 1 To UBound(TabCode)
                                TabResult(FinTabResult + n) = TabCode(n)
                            Next n
                        End If 'NewCode
     
                        If Lig + 1 = NombreDeLigne Then ' fin tmp
                            Exit Sub
                        Else
                            ReDim TabCode(0)
                            LigneTab = 0
                            Call Codage("Code2", Lig + 1, True)
                        End If 'fin tmp
                    End If 'FinCode
     
                    'aiguillage vers derniers element du code
                    If Lig + 1 = LargeurCode - 1 Then
                        TabTmp = TabCode
                        ReDim TabCode(0)
                        LigneTab = 0
                        Call Codage("Code2", Lig + 1, True, True)
     
                        For n = 1 To UBound(TabTmp)
                            LigneTab = LigneTab + 1
                            ReDim Preserve TabCode(LigneTab)
                            TabCode(LigneTab) = TabTmp(n) & Cells(Lig + 1, ColLig2).Value
                        Next n
                    Else
                        TabTmp = TabCode
                        ReDim TabCode(0)
                        LigneTab = 0
                        Call Codage("Code2", Lig + 1)
                        Exit Do 'sécurité (tmp)
                    End If 'aiguillage
     
                Else
                    For n = 1 To UBound(TabTmp)
                        LigneTab = LigneTab + 1
                        ReDim Preserve TabCode(LigneTab)
                        TabCode(LigneTab) = TabTmp(n) & Cells(Lig + 1, ColLig2).Value
                    Next n
                    If FinCode Then NewCode = True 'entrée vers sauvegarde code
                End If 'limite B = ""
            Loop 'ligne B
        Loop 'Ligne A
    End Sub
    attention ... le schéma du post #56 a été modifié

    A NOTER (dans le code : une concaténation de 2 tablo )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                       If NewCode Then
                            FinTabResult = UBound(TabResult)
                            ReDim Preserve TabResult(UBound(TabResult) + UBound(TabCode))
                            For n = 1 To UBound(TabCode)
                                TabResult(FinTabResult + n) = TabCode(n)
                            Next n
                        End If 'NewCode
    les déclarations (module feuille)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim NombreDeLigne As Single
    Dim LigneTab As Integer
    Dim TabCode() As String
    Dim TabTmp() As String
    Dim TabResult() As String
    Dim LargeurCode As Integer
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  19. #59
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 90
    Points
    90
    Par défaut
    Merci JP,

    C'est intéressant.
    Mais comment mets-tu cela en marche ?

    Bonne soirée,
    Blaise

  20. #60
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 435
    Points
    1 435
    Par défaut
    bonjour,
    je ne doit pas utiliser convenablement la récursivité
    le principe de lignes qui se complètent reste valable
    je pense qu'il faut extraire un bloc et en faire une fonction externe de la boucle
    et remplacer la récursivité par une autre boucle....
    à voir

    pour lancer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        '----- appel codage
        LigneTab = 0
        ColLig1 = 1
        ReDim TabResult(0)
        Call Codage("Code2", 1)
    avec nouvelles déclarations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim NombreDeLigne As Single
    Dim LigneTab As Integer
    Dim TabCode() As String
    Dim TabTmp() As String
    Dim TabResult() As String
    Dim LargeurCode As Integer
    Dim ColLig1 As Single
    nouveau code vba

    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
     
    Private Sub Codage(OngletName As String, Lig As Single, Optional FinCode As Boolean = False, Optional NewCode As Boolean = False)
        Do 'boucle ligne A
            If Lig = 1 Then
                LigneTab = LigneTab + 1
                ReDim TabCode(LigneTab)
                TabCode(LigneTab) = Cells(Lig, ColLig1).Value
                LigneTab = 0
                TabTmp = TabCode
                ReDim TabCode(0)
            End If 'Lig = 1
     
            Do 'boucle ligne B
                ColLig2 = ColLig2 + 1
                If Cells(Lig + 1, ColLig2).Value = "" Then 'colonne -> limite = ""
     
                    'sauvegarde code
                    If FinCode Then
                        If NewCode Then
                            FinTabResult = UBound(TabResult)
                            ReDim Preserve TabResult(UBound(TabResult) + UBound(TabCode))
                            For n = 1 To UBound(TabCode)
                                TabResult(FinTabResult + n) = TabCode(n)
                            Next n
                        End If 'NewCode
     
                        If Lig + 1 = NombreDeLigne Then ' fin tmp
                            If LargeurCode = NombreDeLigne Then
                                'change de colonne ligne A
                                Lig = 1
                                ColLig1 = ColLig1 + 1
                                If Cells(Lig, ColLig1).Value = "" Then 'colonne -> limite = ""
       '############# IMPASSE ??? #######################
       'probleme de récursivité avec exit sub
                                        Exit Sub 'sécurité (tmp)
                                Else
                                    Call Codage("Code2", Lig)
                                End If 'limite A = ""
                            Else
                                'change de ligne ligne A
     
                            End If
                        Else
                            ReDim TabCode(0)
                            LigneTab = 0
                            Call Codage("Code2", Lig + 1, True)
                        End If 'fin tmp
                    End If 'FinCode
     
                    'aiguillage vers derniers element du code
                    If Lig + 1 = LargeurCode - 1 Then
                        TabTmp = TabCode
                        ReDim TabCode(0)
                        LigneTab = 0
                        Call Codage("Code2", Lig + 1, True, True)
     
                        'For n = 1 To UBound(TabTmp)
                        '    LigneTab = LigneTab + 1
                        '    ReDim Preserve TabCode(LigneTab)
                        '    TabCode(LigneTab) = TabTmp(n) & Cells(Lig + 1, ColLig2).Value
                        'Next n
                    Else
                        TabTmp = TabCode
                        ReDim TabCode(0)
                        LigneTab = 0
                        Call Codage("Code2", Lig + 1)
                        Exit Do 'sécurité (tmp)
                    End If 'aiguillage
     
                Else
                    For n = 1 To UBound(TabTmp)
                        LigneTab = LigneTab + 1
                        ReDim Preserve TabCode(LigneTab)
                        TabCode(LigneTab) = TabTmp(n) & Cells(Lig + 1, ColLig2).Value
                    Next n
                    If FinCode Then NewCode = True 'entrée vers sauvegarde code
                End If 'limite B = ""
            Loop 'ligne B
        Loop 'Ligne A
    End Sub
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

Discussions similaires

  1. Réponses: 20
    Dernier message: 05/03/2009, 03h46
  2. [XSL]Problème affiche noeuds non traités
    Par tomsawyer dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 27/06/2006, 17h22
  3. [xml/xsl] Problème de noeuds et attributs
    Par Avallach dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 14/01/2006, 15h31
  4. [JAVA] Problème supression noeud d'un document XML
    Par vero59 dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/08/2005, 17h12
  5. [XSL] Petit problème de selection d'un noeud
    Par Greg L. dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/04/2005, 10h39

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