Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2012, 12h03   #1
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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 :
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
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 12h26   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
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 :
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))))")
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 13h23   #3
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 13h38   #4
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Citation:
heu, pourtant ma formule spécifie bien le nom du workbooks : ( variable11)
Nan,
Code :
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 :
"[" & variable11 & "]" & Workbooks(variable11).ActiveSheet.Name & "!$A$1"
avec possiblement des apostrophes en supplément.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 17h00   #5
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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 ?....
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 17h58   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
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.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 18h27   #7
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 695
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 695
Points : 1 447
Points : 1 447
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.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 09h26   #8
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 09h51   #9
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
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 ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h35   #10
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 695
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 695
Points : 1 447
Points : 1 447
Bonjour,

Une autre solution : utiliser la méthode Find.
Code :
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.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 14h00   #11
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 15h32   #12
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Le code suivant fonctionne. La feuille active du classeur défini par "variable11" est "Feuil1-3" :

Code :
1
2
3
variable11 = "barres de commande.xls"
MsgBox Workbooks(variable11).ActiveSheet.Name
MsgBox Evaluate("'[" & variable11 & "]" & Workbooks(variable11).ActiveSheet.Name & "'!$A$1")
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 15h51   #13
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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é
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 17h18   #14
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Désolé de ne pas avoir été plus clair.
Citation:
Code :
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 :
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 :
='[BARRES DE COMMANDE.xls]Feuil1-3'!$A$1
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 08h41   #15
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 10h23   #16
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Citation:
j'ai pas compris la finalité
La finalité, c'est de montrer la syntaxe à utiliser dans la formule que tu testes avec "evaluate".

Citation:
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 :
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))))")
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 10h36   #17
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
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
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 11h21   #18
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Oups. Il manquait quelques apostrophes :

Code :
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))))")
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h50.


 
 
 
 
Partenaires

Hébergement Web