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 :

Probleme avec un code .name


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut Probleme avec un code .name
    bonjour à tous, j'ai un souci sur ce code, en effet il m'arrive de tomber sur des cas , ou la variable 11 est un nom comme ceci : xxxxx-3 et son activesheet porte le meme nom, ce qui pose donc probleme je pense avec le .name car j'ai un erreur 2015 sur mon coutpompe.

    y'aurait il un autre moyen de rédiger cette formule? pour eviter ce probleme avec le nom de la sheet ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coutpompe = Evaluate("INDEX(" & Workbooks(variable11).ActiveSheet.Name & "!J1:J65536,MAX(IF(NOT(ISERR(SEARCH(""habille""," & Workbooks(variable11).ActiveSheet.Name & "!B2:B65536)))*NOT(ISERR(SEARCH(""pompe""," & Workbooks(variable11).ActiveSheet.Name & "!D2:D65536)))>0,ROW(" & Workbooks(variable11).ActiveSheet.Name & "!B2:B65536))))")
    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Tu veux dire que le classeur portent le même nom (y compris l'extension "xls" ?)
    Quant à refaire ta formule, il serait plus simple de nous dire ce que tu veux calculer.

    Si le classeur désigné par "Variable11" n'est pas le classeur actif, tu vas dans les problèmes, car ta formule ne fait référence qu'au nom de la feuille et non pas au nom du classeur. Ou tu introduis ce dernier dans la formule, ou tu mets (sauf erreur) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Workbooks(variable11).Activate
    coutpompe = Evaluate("INDEX(J1:J65536,MAX(IF(NOT(ISERR(SEARCH(""habille""," & _
    "B2:B65536)))*NOT(ISERR(SEARCH(""pompe"",D2:D65536)))>0,ROW(B2:B65536))))")

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    heu, pourtant ma formule spécifie bien le nom du workbooks : ( variable11) et la feuille : activesheet , alors je ne comprends pas pourquoi il y aurait un problème de ce coté la, non ?

    en fait la formule me permet de récuperer la valeur dans la colonne J de la ligne qui possède dans sa colonne B , la valeur habillé et dans sa colonne D la valeur pompe,

    autrement dit, une Vlookup mais avec deux paramètres , un en colonne B et un en colonne D, et l'intersection des deux donne ce que je cherche .


    mais le seul probleme que j'ai observé, c'est quand la variable11 et donc la sheet car ils ont tout les deux le meme nom, sauf que variable11 contient .xls et que la sheet non, Et bien quand la valeur est de la forme xxx-3 ou xxx-4 etc, et bien la variable coutpompe renvoi une erreur 2015,

    n'y a t'il pas moyen de passer par une autre extension que .name ?


    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    heu, pourtant ma formule spécifie bien le nom du workbooks : ( variable11)
    Nan,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(variable11).ActiveSheet.Name
    ne renvoie que le nom de la feuille. Poour avoir le nom du classeur et le nom de la feuille dans la formule, il faut une syntaxe du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "[" & variable11 & "]" & Workbooks(variable11).ActiveSheet.Name & "!$A$1"
    avec possiblement des apostrophes en supplément.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    ah bon ? mince alors, et le fait de le mettre ou de ne pas le mettre sa change quoi alors? ( workbooks) , car si on ne le met pas, bin c'est que la feuille qui est spécifié, et avec aussi ?....

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Si le classeur est le classeur actif, tu n'as ni besoin de préciser le classeur, ni la feuille. C'est le code que j'ai posté. J'active le classeur et, dans la formule, j'ai ôté la référence au classeur et à la feuille.

  7. #7
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Pour ma part, j’éviterais d’utiliser un tiret "-" dans un nom de feuille.
    Dans une formule, il peut être interprété comme un signe "moins".

    Cordialement.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    bin en fait, concretement ma macro, joue en permanence avec 3 classeurs différents, donc pour n'avoir aucun risque de mélanger les données des classeurs, j'ai choisi, de rappeler tout le temps, le nom de feuille et le nom de classeur, sa allourdi la macro je suis d'accord, mais sa évite les .activate récurrent, après je ne suis pas un expert, mais je pensais plus propre la solution ou l'on spécifie le maximum de chose ( tant que c'est pertinent ) plutot que de passer par des .activate , qui dans mon cas vont revenir très souvent.

    Pour ce qui est du tiret dans le nom de feuille, je n'est hélas pas le choix, car la macro utilise des fichiers dont je ne suis pas l'auteur, et ou les tiret sont indispensable.... donc je dois faire avec, et le but serait d'isoler ce tiret dans la formule , ou bien d'utiliser autre chose que .name pour ne pas reperer ce tiret ...

    n'y a t'il pas de solution ?

    Merci

  9. #9
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Je ne pense pas que le tiret soit un gros inconvénient, le nom de la feuille étant de type string. Est-ce que tu a réussi à incorporer le nom du classeur dans la formule ?

  10. #10
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Une autre solution : utiliser la méthode Find.
    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
    Dim Ws As Worksheet
    Set Ws = Workbooks(variable11).ActiveSheet
    With Ws.Range("B1:B65536")
        Set c = .Find("habille", LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                If c.Offset(0, 2) = "pompe" Then
                    coutpompe = c.Offset(0, 8)
                    Exit Do
                End If
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
    Cordialement.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    Merci pour cette solution, je vais l'essayer,

    mais tout d'abord, d'après mes test, je suis formel, c'est le tiret qui pose souci avec la formule, toute les autres valeurs hormis celle avec -3 ou autre chiffre, fonctionne avec cette formule, donc je pense vraiment que le souci vient de la ... mais je vais essayer avec votre idée.

    Par contre j'aurais aimé avoir plus de précision sur le fait de préciser le classeur et la feuille.

    si j'ai bien compris, le fait de mettre workbooks ("nom du classeur").sheet ("nom de la sheet") , ne suffit pas pour indiquer le classeur à prendre?

    car dans toutes les formules ou je souhaite utiliser des classeurs différents, j'ai procédé avec cette methode.

    en sachant que les classeurs que je spécifie ds mes formules, sont tous ouvert! ( c'est une certitude car c'est une condition de départ de la macro).

    Merci encore pour votre aide

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Le code suivant fonctionne. La feuille active du classeur défini par "variable11" est "Feuil1-3" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    variable11 = "barres de commande.xls"
    MsgBox Workbooks(variable11).ActiveSheet.Name
    MsgBox Evaluate("'[" & variable11 & "]" & Workbooks(variable11).ActiveSheet.Name & "'!$A$1")

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    je n'ai pas tout suivi, votre code permet de me retourner ceci : Workbooks(variable11).ActiveSheet.Name

    mais du coup sans tenir compte du -3 grace au evaluate, C'est bien sa ?

    pourriez vous me donner des précisions à propos de mon dernier post?


    merci encore pour votre rapidité

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Désolé de ne pas avoir été plus clair.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    variable11 = "barres de commande.xls"
    MsgBox Workbooks(variable11).ActiveSheet.Name
    MsgBox Evaluate("'[" & variable11 & "]" & Workbooks(variable11).ActiveSheet.Name & "'!$A$1")
    La feuille active du classeur "Barres de commande.xls" se nomme "Feuil1-3".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evaluate("'[" & variable11 & "]" & Workbooks(variable11).ActiveSheet.Name & "'!$A$1")
    renvoie la valeur de la cellule A1 de cette feuille. C'est l'équivalent de la formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ='[BARRES DE COMMANDE.xls]Feuil1-3'!$A$1

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    ok d'accord, j'ai essayé le code, et effectivement sa renvoi bien la valeur de la cellule A1, ok, mais j'ai pas compris la finalité? par rapport à ma formule de départ

    je vois bien maintenant comment rédiger une commande en spécifiant le nom de feuille et du classeur, mais je n'ai pas compris la différence avec le fait de mettre workbooks qui fonctionne aussi


    le evaluate me permet donc de faire abstraction du -3 c'est bien sa ?


    merci pour votre aide

  16. #16
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    j'ai pas compris la finalité
    La finalité, c'est de montrer la syntaxe à utiliser dans la formule que tu testes avec "evaluate".

    le evaluate me permet donc de faire abstraction du -3 c'est bien sa ?
    Encore une fois, le "-3" n'est pas un problème. J'ai testé cette formule sur une feuille nommée "Feuil1-3". Sans souci. Poour revenir à ta question première, essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NomWB_NomFeuille = "'[" & variable11 & "]" & Workbooks(variable11).ActiveSheet.Name
    coutpompe = Evaluate("INDEX(" & NomWB_NomFeuille & "!J1:J65536,MAX(IF(NOT(ISERR(SEARCH(""habille""," & _
        NomWB_NomFeuille & "!B2:B65536)))*NOT(ISERR(SEARCH(""pompe""," & NomWB_NomFeuille & _
        "!D2:D65536)))>0,ROW(" & NomWB_NomFeuille & "!B2:B65536))))")

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    oui merci pour l'explication de la syntaxe sa j'ai bien saisi, mais je viens de comprendre, le probleme ne vient pas du -3, mais en réalité les feuilles que j'ai sont de cette forme :


    ABXXXX-3 , ou XXXX sont toujours des chiffres...
    du coup mon souci arrive quand je tombe sur une feuille nommé

    AB4045-3 , et la sa devient un souci le -3 .... je pense?

    j'essaye votre formule en parallèle.

    merci

  18. #18
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Oups. Il manquait quelques apostrophes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NomWB_NomFeuille = "'[" & variable11 & "]" & Workbooks(variable11).ActiveSheet.Name
    coutpompe = Evaluate("INDEX(" & NomWB_NomFeuille & "'!J1:J65536,MAX(IF(NOT(ISERR(SEARCH(""habille""," & _
        NomWB_NomFeuille & "'!B2:B65536)))*NOT(ISERR(SEARCH(""pompe""," & NomWB_NomFeuille & _
        "'!D2:D65536)))>0,ROW(" & NomWB_NomFeuille & "'!B2:B65536))))")

Discussions similaires

  1. Probleme avec mon code : Comment changer de JPanel
    Par serialkilled dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/12/2006, 10h13
  2. [Tableaux] probleme avec mon code pour faire un parseur !
    Par Joe-La-Boule dans le forum Langage
    Réponses: 10
    Dernier message: 11/10/2006, 15h35
  3. [VC++] probleme avec le Pipe Named
    Par ksoft dans le forum Visual C++
    Réponses: 2
    Dernier message: 21/07/2006, 18h34
  4. Problème avec mon code et avec gcc
    Par JavaAcro dans le forum Linux
    Réponses: 3
    Dernier message: 13/06/2006, 22h47
  5. Probleme avec le code
    Par vivu dans le forum C++
    Réponses: 10
    Dernier message: 29/10/2005, 20h52

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