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èmes de Nom et d'antécédents..


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 9
    Par défaut Problèmes de Nom et d'antécédents..
    Bonjour,

    Je vais essayer de simplifier mon problème au maximum. L'histoire est la suivante : j'ai plusieurs Name définis sur ma feuille Excel, et chacun de ces names correspond à des plages de cellules.

    Certains de mes Name sont plein de formules et ont pour antécédents d'autres Names, qui eux sont des données brutes.

    Seulement, je n'arrive pas a définir simplement quel Name dépend de quel Name ( pour faire leur extention / mise a jour dans l'ordre, enfait ).

    Imaginons la chose suivante : J'ai dans ma feuille 1 des data, avec comme Name défini "kikou1" = Feuil1!A1:B2, c'est a dire les 4 premières cellules, et Kikou2 = les 4 cellules d'en dessous.

    Mettons dans Feuil2!A1 "=Feuil1!A1+Feuil1!B2", et dans Feuil2!A2 "=Feuil1!A3 + Feuil1!B4"

    Posons le nom suivant : kikou3 = Feuil2!A1:A2.

    j'aimerais une macro, qui a partir de kikou3 me dise que Kikou3 dépend de kikou1 et kikou2.

    Je peut faire une macro qui me dit que Kikou1 dépend de A1;B2;A3 et B4 mais je ne sais pas comment re-transformer cela pour trouver les Noms Kikou1 et kikou2.


    Qu'en pensez-vous ?

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Peut être une alternative à une macro.

    Dans Excel cette notion qui permet de savoir quels sont les antécédents d'une formule existe :
    Tu te places sur une formule.
    Tu vas dans l'onglet Formules
    Et tu cliques une ou plusieurs fois sur le bouton Repérer les antécédents.
    Des flèches bleues s'affichent.
    Quand tu as fini. Cliques sur le bouton Supprimer les flèches.

    Tout cela t'évite de coder ...

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 9
    Par défaut
    Non, il faut que je le code enfait.

    Je joue depuis plusieurs heures avec ces fonction d'excel, et je les implémentes.

    l'idée est de construire une macro qui traiteras ( beaucoup ) de fichier pour y faire la même mise a jour : Regarder les plages brutes antécédentes des plages de calcul, voir si elles ont grandis, et dans ce cas la étendre les formule.


    En gros, j'aimerais en toute généralitée arriver a récupérer les plages antécédentes d'une plage donnée : Des prise de décision comme ça j'en ai une 20aine par fichier et plus de 50fichiers..

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    Je ne sais pas exactement ce que tu veux faire, mais

    Pour récupérer les précédents.

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 9
    Par défaut
    Pour récupérer les précédents, j'ai mieux :

    Code vba : 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
     
    'won't navigate through precedents in closed workbooks
    'won't navigate through precedents in protected worksheets
    'won't identify precedents on hidden sheets
    Public Function GetAllPrecedents(ByRef rngToCheck As Range) As Object
     
        Const lngTOP_LEVEL As Long = 1
        Dim dicAllPrecedents As Object
        Dim strKey As String
     
        Set dicAllPrecedents = CreateObject("Scripting.Dictionary")
     
        Application.ScreenUpdating = False
     
        GetPrecedents rngToCheck, dicAllPrecedents, lngTOP_LEVEL
        Set GetAllPrecedents = dicAllPrecedents
     
        Application.ScreenUpdating = True
     
    End Function
     
    Private Sub GetPrecedents(ByRef rngToCheck As Range, ByRef dicAllPrecedents As Object, ByVal lngLevel As Long)
     
        Dim rngCell As Range
        Dim rngFormulas As Range
     
        If Not rngToCheck.Worksheet.ProtectContents Then
            If rngToCheck.Cells.CountLarge > 1 Then   'Change to .Count in XL 2003 or earlier
                On Error Resume Next
                Set rngFormulas = rngToCheck.SpecialCells(xlCellTypeFormulas)
                On Error GoTo 0
            Else
                If rngToCheck.HasFormula Then Set rngFormulas = rngToCheck
            End If
     
            If Not rngFormulas Is Nothing Then
                For Each rngCell In rngFormulas.Cells
                    GetCellPrecedents rngCell, dicAllPrecedents, lngLevel
                Next rngCell
                rngFormulas.Worksheet.ClearArrows
            End If
        End If
     
    End Sub
     
    Private Sub GetCellPrecedents(ByRef rngCell As Range, ByRef dicAllPrecedents As Object, ByVal lngLevel As Long)
     
        Dim lngArrow As Long
        Dim lngLink As Long
        Dim blnNewArrow As Boolean
        Dim strPrecedentAddress As String
        Dim rngPrecedentRange As Range
     
        Do
            lngArrow = lngArrow + 1
            blnNewArrow = True
            lngLink = 0
     
            Do
                lngLink = lngLink + 1
     
                rngCell.ShowPrecedents
     
                On Error Resume Next
                Set rngPrecedentRange = rngCell.NavigateArrow(True, lngArrow, lngLink)
     
                If Err.Number <> 0 Then
                    Exit Do
                End If
     
                On Error GoTo 0
                strPrecedentAddress = rngPrecedentRange.Address(False, False, xlA1, True)
     
                If strPrecedentAddress = rngCell.Address(False, False, xlA1, True) Then
                    Exit Do
                Else
     
                    blnNewArrow = False
     
                    If Not dicAllPrecedents.Exists(strPrecedentAddress) Then
                        dicAllPrecedents.Add strPrecedentAddress, lngLevel
                        GetPrecedents rngPrecedentRange, dicAllPrecedents, lngLevel + 1
                    End If
                End If
            Loop
     
            If blnNewArrow Then Exit Do
        Loop
     
    End Sub

    La fonction GetAllPrecedents te sort un dictionaires des précédents pour une plage données.

    Cela s'utilise de cette manière : ( pour la plage "coucou" ).
    Code VBA : 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
     
    Sub Test()
     
        Dim rngToCheck As Range
        Dim dicAllPrecedents As Object
        Dim i As Long
        Dim myrange As Range
     
        Set rngToCheck = Range("coucou")
        Set dicAllPrecedents = GetAllPrecedents(rngToCheck)
     
        Debug.Print "==="
     
        If dicAllPrecedents.Count = 0 Then
            Debug.Print rngToCheck.Address(external:=True); " has no precedent cells."
        Else
            For i = LBound(dicAllPrecedents.keys) To UBound(dicAllPrecedents.keys)
    '            myrange = Union_mathematique(myrange, Range(dicAllPrecedents.keys()(i)))
                Debug.Print "[ Level:"; dicAllPrecedents.Items()(i); "]";
                Debug.Print "[ Address: "; dicAllPrecedents.keys()(i); " ]"
            Next i
        End If
        Debug.Print "==="
     
    End Sub

    Le problème c'est que j'obtient une liste de Cell.

    il faudrais ensuite, qu'a partir de cette liste de cell, je vérifie si elles appartiennent a d'autres plages données, disons rassemblées dans un tableau de plages Dim kikou() as range.

    Mon problème est donc de transformer un tableau de Range qui sont surement cotes_a_cotes en une seule Range, puis de reconaitre dans ma base de donnée de Names ( disons Dim bdd() as Name ) cette plage.


    est-ce un peu plus clair ?

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Oui. mais ca demeure ambigu. Le mieux c'est de joindre un classeur avec un petit exemple complet où tu précises exactement ce que tu veux obtenir.

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par lrnv69 Voir le message
    il faudrais ensuite, qu'a partir de cette liste de cell, je vérifie si elles appartiennent a d'autres plages données
    méthode Intersect

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

Discussions similaires

  1. [Lycos] Problème de nom de domaine
    Par yannickn dans le forum Autres hébergeurs
    Réponses: 30
    Dernier message: 07/05/2009, 11h33
  2. Problème du nom de projet
    Par pracede2005 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 21/11/2006, 15h46
  3. Problème de nom de table non conventionnel
    Par arN34 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/08/2006, 14h00
  4. Problème de nom de table
    Par davix123 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/02/2006, 14h41
  5. Delphi - Base donnée Paradox, problème de nom des champs
    Par mjp dans le forum Bases de données
    Réponses: 1
    Dernier message: 02/01/2005, 21h10

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