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 12/12/2011, 20h42   #1
Invité de passage
 
Inscription : avril 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 6
Points : 1
Points : 1
Par défaut Recherche à partir d'un autre classeur.

Bonsoir,

Je débute en VBA et j'ai un peu du mal à résoudre mon problème qui est : faire appel à un autre classeur.
Je m'explique, dans un premier classeur j'ai une base de donnée (BD.xls) et dans un deuxieme classeur une fiche de renseignement (FR.xls). Dans cette base on trouve le nom du produit, son indice, son code achat...
J'aimerai pouvoir effectué une recherche dans le classeur BD à l'aide de deux critères renseignés dans le classeur FR (en celulle A2 : nom du produit et en B2 son indice). Le résultat corréspondant à ces deux critère doit apparaitre dans la cellule C2 du classeur FR.xls.

J'arrive à réaliser la fonction recherche lorsque le Base de Donnée est dans le même classeur que les critères, mais pas quand ces derniers sont dans un autre classeur.

Pourriez vous me guider??

Merci d'avance.
mart_val est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 20h54   #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
Bonsoir,

Si, tu peux le faire, à condition que les deux classeurs soient ouverts. Poste ta macro.
__________________
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/12/2011, 21h19   #3
Invité de passage
 
Inscription : avril 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 6
Points : 1
Points : 1
Voila ma formule de recherche si tout est dans le même classeur:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Sub recherche()
Dim i As Integer
For i = 8 To 1200
    If Sheets("feuil2").Range("A2") = Sheets("feuil1").Cells(i, 1) Then
    Sheets("feuil2").Range("E2").Value = i
                If Sheets("feuil2").Range("B2") = Sheets("feuil1").Cells(i, 2) Then
                Sheets("feuil2").Range("C2").Value = Sheets("feuil1").Cells(i, 7)
                Else
                Sheets("feuil2").Range("C2").Value = "Pas de code info"
                End If
    End If
Next i
End Sub
J'aimerai à la place de "Sheets("feuil1")" avoir le chemin de mon classeur BD. J'ai essayé avec des workseehts mais je ne connais pas assez...

Merci en tout cas de regarder.
mart_val est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 22h16   #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
Les deux classeurs doivent être ouverts; il n'y a donc pas lieu de préciser leur chemin.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Sub recherche()
Dim i As Integer
For i = 8 To 1200
If Sheets("feuil2").Range("A2") = Workbooks("BD.xls").Sheets("feuil1").Cells(i, 1) Then
Sheets("feuil2").Range("E2").Value = i
If Sheets("feuil2").Range("B2") = Workbooks("BD.xls").Sheets("feuil1").Cells(i, 2) Then
Sheets("feuil2").Range("C2").Value = Workbooks("BD.xls").Sheets("feuil1").Cells(i, 7)
Else
Sheets("feuil2").Range("C2").Value = "Pas de code info"
End If
End If
Next i
End Sub
ou en simplifiant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Sub recherche()
Dim i As Integer
With Workbooks("BD.xls").Sheets("feuil1")
    For i = 8 To 1200
        If Sheets("feuil2").Range("A2") = .Cells(i, 1) Then
        Sheets("feuil2").Range("E2").Value = i
        If Sheets("feuil2").Range("B2") = .Cells(i, 2) Then
        Sheets("feuil2").Range("C2").Value = .Cells(i, 7)
        Else
        Sheets("feuil2").Range("C2").Value = "Pas de code info"
        End If
        End If
    Next i
End With
End Sub
__________________
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/12/2011, 22h34   #5
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
bonsoir,

le plus propre est quand même d'utiliser 2 variables objet de type worksheet pointant sur chacune de tes feuille et éviter des codes aléatoires ou tu ne précise pas le classeur concerné style :
Code :
sheets("feuil2").Range("C2").Value = "Pas de code info"

en considérant que ton classeur FR contient ton code et ouvre le fichier bd inspire toi de
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
dim shFR as worksheet
Dim shBD as worksheet
dim wkBD as worksheet
 
set wkBD = worbooks.open("C:\...bd.xls") 'ouvre fichier BD
'wkBD permet maintenant d'agir sur le classeur bd.xls..
set shBD = wkBD.sheets("Feuil2") 
set shFR = ThisWorkBook.worksheets("Feuil1") ' 
...
If shBD.Range("A2") = shFR.Cells(i, 1) Then
...
voila pour le principe il faudrait rajouter quelque test comme sur la réussite d'ouverture du fichier BD ...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 08h31   #6
Invité de passage
 
Inscription : avril 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 6
Points : 1
Points : 1
Bonjour,

Tout d'abord merci à toi Daniel. Car ton code fonctionne quand les deux classeurs sont ouverts!

BBil, merci de préter attention au sujet. J'ai essayé d'adapter ton code mais quand je le genere, une erreur arrive. Pour la ligne 8 :
Set shBD = wkBD.Sheets("Feuil1")
Citation:
Erreur : "Membre de méthode ou de données introuvable"
Ce que tu me propose peut marcher si le classeur BD est férmè?

Merci à vous deux (Daniel et BBil)!
mart_val est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 10h02   #7
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,

Citation:
Ce que tu me propose peut marcher si le classeur BD est férmè?
Nan, c'est pourquoi bbil ouvre ce classeur. (pour le principe, on devrait s'assurer qu'il n'est pas déjà ouvert.) :

Code :
set wkBD = worbooks.open("C:\...bd.xls") 'ouvre fichier BD
__________________
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/12/2011, 14h23   #8
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
Excuse-moi, mais le sujet de ton message m'a trompé. Tu peux récupérer des cellules dans un classeur fermé. Regarde le tuto ici :

http://silkyroad.developpez.com/VBA/ClasseursFermes/
__________________
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 14/12/2011, 19h13   #9
Invité de passage
 
Inscription : avril 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 6
Points : 1
Points : 1
Je te remerci Daniel! J'ai pu résoudre mon probleme grace à toi (et a BBil).

Merci
mart_val est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h15.


 
 
 
 
Partenaires

Hébergement Web