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 :

interprétatoin fonction INDIRECT - Langue


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Par défaut interprétatoin fonction INDIRECT - Langue
    Bonjour,
    j'ai réalisé une macro dernièrment qui permet de colorier le choix que l'on fait dans un menu déroulant (datavalidation).
    Il ne sagit pas de format conditionnel mais bien de Datavalidation avec dans certain cas l'emploi de la fonction "indirect" dans la datavalidation.

    Cette macro fonctionne très bien mais quand le fichier est envoyé à l'étranger.
    Elle bug uniquement quand la datavalidation utilise cette fameuse fonction "indirect".

    Après analyse avec mes collègues Espagnol, la fonction indirect se traduit par "indirecto".

    La ligne de commande que j'utilise interprète mal le tout puisque la fonction est comprise, je pense, en mode texte et non pas dynamique. La voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set References = Range(ActiveCell.Validation.Formula1)
    La solution de remplacer "indirect par indirecto" n'est pas pensable puisqu'il faudrait la traduire dans toutes les langues (puisque ces un fichiers WW).

    Merci d'avance aux "king" de VBA-Excel de votre aide.

    A toute fin utilse, voici la macro au complet:



    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
     
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
    Dim Plage As Range, Noms As Range, CelNom As Range, Celcouleur As Range
    On Error Resume Next 'Permet d'arreter la macro sans message en d'erreur
     
    Set References = Range(ActiveCell.Validation.Formula1) 
    If Sh.Name = ("Configurator") Then 'Feuille du classeur avec liste déroulante
        Set Plage = Range("D9:D25") 'Plage dans la feuille du classeur
     
    Else: Exit Sub
    End If
     
     
     
    If Not Intersect(Target, Plage) Is Nothing Then
        For Each CelNom In Intersect(Target, Plage)
            For Each Celcouleur In References
     
                   If CelNom = Celcouleur Then
                        CelNom.Interior.ColorIndex = Celcouleur.Interior.ColorIndex
                        CelNom.Font.ColorIndex = Celcouleur.Font.ColorIndex
                        Exit For
                   End If
     
                   If CelNom <> Celcouleur Then
                        CelNom.Interior.Color = 255
                   End If
     
            Next Celcouleur
        Next CelNom
    End If
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Peut-être comme ceci (non testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Formule = ActiveCell.Validation.Formula1
        Tabl = Split(Formule, "(")
        Tabl(0) = "=INDIRECT"
        Formule = Join(Tabl, "(")
        Set References = Range(Formule)

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Par défaut
    Merci Daniel,

    J'ai bien compris le principe mais malheureusement cela ne fonctionne pas.
    Mais là je ne comprend pas pourquoi.

    Si tu peux encore m'aider, j'apprécierai fortement.

    A toute fin utile j'ai mis le fichier XLS en question et la macro en fichier TXT pour montrer mes bonnes intentions.

    Merci encore
    Pièces jointes en attente de validation Pièces jointes en attente de validation

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,
    Bon, tes fichiers ont bien aidé à décanter le problème. Ma solution ne pouvait pas fonctionner; j'étais parti sur des formules commençant par "=INDIRECT". Par contre, ta macro se déclenche à chaque fois qu'on entre une donnée ou une formule dans une cellule, quelle que soit la feuille. Est-ce bien ce que tu veux ?
    Où sont les listes déroulantes (validation de données) contenant les formules incriminées ?

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Par défaut
    Effectivement le but est que la macro se déclanche à chaque fois que l'on change qqchose dans l'onglet "Configurator" et en particulier dans le range D9:D25.
    Les fonction indirectes sont en D10, D13, D14, D17, D18, D19, D22, D23.
    Tu auras donc compris que les fonctions " SPLIT et JOIN" poseraient des problèmes puisque la fonction Indirect n'est pas utilisée pour chaque cellule du range (D9:D25)



    Les listes déroulentes se retrouvent respectivement dans les onglets "Specific configuration" et "Common configuration".

    Chaque encadrement specifie une zone nommée dont le nom (pour info) se trouve en bleu en dessous du cadre.

    Merci encore pour ton aide.

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    C'est difficile pour moi de tester... J'ai mis "INDIRECTO" par VBA dans la formule. Utilise le code suivant la formule avant et après modification s'affichera quand tu modifieras une liste de la feuille "Configurator" :

    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
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
    If Intersect(Target, [D9:D25]) Is Nothing Then Exit Sub
    Dim Plage As Range, Noms As Range, CelNom As Range, Celcouleur As Range
    On Error Resume Next 'Permet d'arreter la macro sans message en d'erreur
     
    'Set References = Range("Empty_head") 'Reference = zone avec un nom de champ içi Empty Head
    'Dans notre cas de figure, il faut que la reference soit liée avec le nom de champ repris dans chaque datavalidation ce qui donne ceci
     
     
     
    ' solution pour interprétation de la fonction Indirect dans toutes les langues Excel INDIRECT-INDIRECTO-...
     
     
        formule = ActiveCell.Validation.Formula1
        Tabl = Split(formule, "(")
        '*** pour test
        Tabl(0) = "=INDIRECTO"
        MsgBox "formule initiale : " & Join(Tabl, "(")
        Tabl(0) = "=INDIRECT"
        formule = Join(Tabl, "(")
        MsgBox "formule corrigée : " & formule
        '***
        Set References = Range(formule)
     
     
     
    ' Set References = Range(ActiveCell.Validation.Formula1) 'Activecell.Validation.Formula1 est la commande qui permet de reprendre la formule dans la data validation de la cellule active
     
    If Sh.Name = ("Configurator") Then 'Feuille du classeur avec liste déroulante
        Set Plage = Range("D9:D25") 'Plage dans la feuille du classeur
    'ElseIf Sh.Name = ("3 quadri 2005") Then 'Exemple si tu veux mettre une autre feuille ou autre plage, voir ligne suivante
        'Set Plage = Range("D4:D33,H4:H34,L4:L33,P4:P34")
    Else: Exit Sub
    End If
     
    'ThisWorkbook.
     
    If Not Intersect(Target, Plage) Is Nothing Then
        For Each CelNom In Intersect(Target, Plage)
            For Each Celcouleur In References
     
                   If CelNom = Celcouleur Then
                        CelNom.Interior.ColorIndex = Celcouleur.Interior.ColorIndex
                        CelNom.Font.ColorIndex = Celcouleur.Font.ColorIndex
                        Exit For
                   End If
     
                   If CelNom <> Celcouleur Then
                        CelNom.Interior.Color = 255
                   End If
     
            Next Celcouleur
        Next CelNom
    End If
     
    End Sub

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/05/2008, 20h48
  2. Réponses: 3
    Dernier message: 09/10/2007, 02h50
  3. je ne sais pas utiliser la fonction "indirect"
    Par kingtang dans le forum Excel
    Réponses: 5
    Dernier message: 30/09/2007, 21h33
  4. redirection en fonction la langue
    Par Alex35 dans le forum ASP
    Réponses: 10
    Dernier message: 07/11/2006, 10h59
  5. Fonction INDIRECT avec variable sur n° de colonne
    Par mat.guillaume dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/08/2006, 18h04

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