• Initiateur de la discussion Initiateur de la discussion Arpette
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Arpette

XLDnaute Impliqué
Code:
Bonjour le forum, je souhaite faire une rechercheV en Vba. 
J'ai une feuille active (Page 1), si j'ai un nom dans la cells (35,11),
sa ouvre un classeur Clients. 
Le chemin = C:\Documents and Settings\JFL CONTROLE\Bureau\Mes Clients
feuille Clients colonnes de A à D 
et renvoi les valeurs dans feuille Page 1 
Cells (36,11), (37,11), (38,11), (39,11)

Merci pour votre aide.
 
Re : Vba RechercheV

Re,

fonctionne chez moi comme ceci :

Code:
Sub test()
Dim Worksheet As Worksheet
Dim rng As Range
Dim Clients As Worksheet
Dim x As Range
Worksheets("Page 1").Select
Set rng = Worksheets("Page 1").Range("K35")
Set Clients = [COLOR="Red"][B]Workbooks("Test1.xls").[/B][/COLOR]Sheets("Clients")
        Set x = Clients.Columns("A:G").Find(Range("K35").Value, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
            Range("K37").Value = x.Offset(0, 1).Value
    'etc...
        End If
End Sub

Attention défusionne les cellules de la ligne 37.... vba et cellules fusionnées, pas facile à gérer.... d'autre part, tu as placé le code dans le module d'une feuille, il faut savoir que sans autre précision toutes les instructions s'appliqueront à la feuille en question et ce quoique tu active....

il fallait également préciser le nom du classeur et feuille car objets non actifs, enfin chez moi lors de l'exécution....
@+
 
Re : Vba RechercheV

Re,

fonctionne chez moi comme ceci :

Code:
Sub test()
Dim Worksheet As Worksheet
Dim rng As Range
Dim Clients As Worksheet
Dim x As Range
Worksheets("Page 1").Select
Set rng = Worksheets("Page 1").Range("K35")
Set Clients = [COLOR="Red"][B]Workbooks("Test1.xls").[/B][/COLOR]Sheets("Clients")
        Set x = Clients.Columns("A:G").Find(Range("K35").Value, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
            Range("K37").Value = x.Offset(0, 1).Value
    'etc...
        End If
End Sub

Attention défusionne les cellules de la ligne 37.... vba et cellules fusionnées, pas facile à gérer.... d'autre part, tu as placé le code dans le module d'une feuille, il faut savoir que sans autre précision toutes les instructions s'appliqueront à la feuille en question et ce quoique tu active....

il fallait également préciser le nom du classeur et feuille car objets non actifs, enfin chez moi lors de l'exécution....
@+

Re,
Merci Pierrot, çà fonctionne. Maintenant que j'ai le début, je vais automatiser.
Comme tu as pu le voir dans mes post mon fichier "Clients" n'est pas ouvert quand la macro va démarrer et je dois l'ouvrir. Je sais comment faire, enfin j'espère.
Merci pour ton aide et à bientôt.
 
Re : Vba RechercheV

Re,
Merci Pierrot, çà fonctionne. Maintenant que j'ai le début, je vais automatiser.
Comme tu as pu le voir dans mes post mon fichier "Clients" n'est pas ouvert quand la macro va démarrer et je dois l'ouvrir. Je sais comment faire, enfin j'espère.
Merci pour ton aide et à bientôt.

Bonsoir à tous, j'ai un petit soucis avec ma macro. Si je l'exécute pas à pas aucun problème, mais si je saisis un nom en K35 puis enter, ça me colle deux valeurs en X37 et X38
Merci de votre aide
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("K35:Z35")) Is Nothing Then Exit Sub

    Dim Worksheet As Worksheet
    Dim rng As Range
    Dim Clients As Worksheet
    Dim x As Range
    Dim Lechemin As String
    Dim MonClasseur As Excel.Workbook
    Dim WB1 As Workbook
    Set WB1 = ThisWorkbook
    Lechemin = "C:\Documents and Settings\JFL CONTROLE\Bureau\Mes Clients\Mes Clients"

    Set MonClasseur = Excel.Workbooks.Open(Lechemin)
    Windows("POLY BENNE + GRUE AUXILIAIRE.xls").Activate
    Worksheets("Page 1").Select
    Set rng = Worksheets("Page 1").Range("K35")
    Set Clients = Workbooks("Mes Clients.xls").Sheets("Clients")
        Set x = Clients.Columns("A:G").Find(Range("K35").Value, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
            Range("K36").Value = x.Offset(0, 1).Value
            Range("I37").Value = x.Offset(0, 2).Value
            Range("I38").Value = x.Offset(0, 3).Value
            Range("I39").Value = x.Offset(0, 4).Value
            Range("K41").Value = x.Offset(0, 5).Value
            Range("K42").Value = x.Offset(0, 6).Value

        End If
    Set rng = Worksheets("Page 1").Range("Z35")
    Set Clients = Workbooks("Mes Clients.xls").Sheets("Clients")
    Set x = Clients.Columns("A:G").Find(Range("Z35").Value, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
            Range("Z36").Value = x.Offset(0, 1).Value
            Range("X37").Value = x.Offset(0, 2).Value
            Range("X38").Value = x.Offset(0, 3).Value
            Range("X39").Value = x.Offset(0, 4).Value
            Range("Z41").Value = x.Offset(0, 5).Value
            Range("Z42").Value = x.Offset(0, 6).Value
        

 MonClasseur.Close
End If
End Sub
 
Re : Vba RechercheV

Bonjour Arpette,

déjà tu as ceci :
Code:
Dim Worksheet As Worksheet

tu utilises comme variable un mot réservé à un objet vba, très déconseillé...
Par contre tu es maintenant dans une procédure événementielle,
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
et toutes modification sur cette feuille, même par le code, déclenchera cet événement.. essaye ainsi :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'ton code
Application.EnableEvents = True
End Sub

cela désactivera les procédures événementielles durant l'exécution de ton code...

bonne soirée
@+
 
Re : Vba RechercheV

Bonjour Arpette,

déjà tu as ceci :
Code:
Dim Worksheet As Worksheet

tu utilises comme variable un mot réservé à un objet vba, très déconseillé...
Par contre tu es maintenant dans une procédure événementielle,
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
et toutes modification sur cette feuille, même par le code, déclenchera cet événement.. essaye ainsi :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'ton code
Application.EnableEvents = True
End Sub

cela désactivera les procédures événementielles durant l'exécution de ton code...

bonne soirée
@+

Bonsoir Pierrot et merci de me répondre, avec ceci il ne se passe plus rien, la recherche ne renvoi aucune valeur
@+
 
Re : Vba RechercheV

Re,

tu as défusionné tes cellules ? mets un tout petit fichier avec le code utilisé, un classeur 2 onglets représentant uniquement le problème posé...
Bonjour Pierrot, bonjour à tous,
ci-joints mes deux fichiers ils fonctionnaient hier après midi, ils ne foctionnent plus aujourd'hui. C'est à ce taper la tête contre les murs.
Merci de votre aide.
 

Pièces jointes

Re : Vba RechercheV

Bonjour Arpette,

A priori ce code fonctionne chez moi sur les derniers fichiers envoyés...

bonne journée
@+

Bonjour Pierrot et merci de me répondre. Je pense que tu as testé avec le code ci-dessous. Mais si tu enlèves Sub et que tu ajoutes les deux lignes qui sont en commentaires, çà ne mache plus. Je ne comprends pas hier çà fonctionnait.
@+

Code:
'Private Sub Worksheet_Change(ByVal Target As Range)
Sub test()
Application.EnableEvents = False

    Dim rng As Range
    Dim Clients As Worksheet
    Dim x As Range
    Dim Lechemin As String
    Dim MonClasseur As Excel.Workbook
    Dim WB1 As Workbook
'If Intersect(Target, Range("K35:Z35")) Is Nothing Then Exit Sub
    
    Set WB1 = ThisWorkbook
    Lechemin = "E:\Test1"

    Set MonClasseur = Excel.Workbooks.Open(Lechemin)
    Windows("Test.xls").Activate
    Worksheets("Page 1").Select
    Set rng = Worksheets("Page 1").Range("K35")
    Set Clients = Workbooks("Test1.xls").Sheets("Clients")
        Set x = Clients.Columns("A:G").Find(Range("K35").Value, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
            Range("K36").Value = x.Offset(0, 1).Value
            Range("I37").Value = x.Offset(0, 2).Value
            Range("I38").Value = x.Offset(0, 3).Value
            Range("I39").Value = x.Offset(0, 4).Value
            Range("K41").Value = x.Offset(0, 5).Value
            Range("K42").Value = x.Offset(0, 6).Value

        End If
    Set rng = Worksheets("Page 1").Range("Z35")
    Set Clients = Workbooks("Test1.xls").Sheets("Clients")
    Set x = Clients.Columns("A:G").Find(Range("Z35").Value, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
            Range("Z36").Value = x.Offset(0, 1).Value
            Range("X37").Value = x.Offset(0, 2).Value
            Range("X38").Value = x.Offset(0, 3).Value
            Range("X39").Value = x.Offset(0, 4).Value
            Range("Z41").Value = x.Offset(0, 5).Value
            Range("Z42").Value = x.Offset(0, 6).Value
        

 MonClasseur.Close
End If
Application.EnableEvents = True
End Sub
 
Re : Vba RechercheV

Re,

dans ton fichier pas de ligne en commentaire et c'est la procédure "Worksheet_Change" qui est utilisée...

A noter, si tu enlèves les lignes en commentaires, il faut mettre la ligne ci-dessous :
Code:
Application.EnableEvents = False

après celle-ci :
Code:
If Intersect(Target, Range("K35:Z35")) Is Nothing Then Exit Sub
 
Re : Vba RechercheV

Re,

dans ton fichier pas de ligne en commentaire et c'est la procédure "Worksheet_Change" qui est utilisée...

A noter, si tu enlèves les lignes en commentaires, il faut mettre la ligne ci-dessous :
Code:
Application.EnableEvents = False

après celle-ci :
Code:
If Intersect(Target, Range("K35:Z35")) Is Nothing Then Exit Sub

Re, toujours pas mieux, en fait j'ai une liste déroulante où je sélectionne un nom je valide il se met en K35 et dès l'instant où il y a quelque chose dans cette cellule la macro rechercheV démarre, mais la elle démarre pas. J'ai ceci sur une macro semblable et çà fonctionne la seule différence c'est que les deux feuilles sont dans le même classeur.
Merci de ton aide.
 
Re : Vba RechercheV

Re,

que donne l'exécution du code pas à pas (F8), mets un point d'arrêt en début de procédure, F9 curseur positionné sur la 1ère ligne de la procédure.
Re, il ne se passe rien avec un point d'arrêt elle ne démarre pas avec F8. Mais il y a quelque chose de bizarre, j'ai réussi à la faire marché, ensuite j'ai réessayer en fusionnant les cellules et la plus rien. Donc je diffusionne les cellules et toujours rien. J'ouvre un autre fichier qui utilise à peu près la même macro et rien, elle ne fonctionnait plus. Je l'ai essayée sur un autre micro çà fonctionne. J'éteint et redémarre mon PC, ma macro refonctionne, je fusionne de nouveau et la plus rien. Je me dis c'est donc la fusion qui fait bugger, donc j'ai remis mes cellules correctement, redémarré le PC, mais la ça ne redémarre plus. C'est à ne rien y comprendre.
Si tu à une piste
@+
 
Re : Vba RechercheV

Re,

as tu tenu compte de mon post de 12h50 ? c'est une fois le point d'arrêt positionné sur la 1ère ligne de ta procédure que tu peux te servir de F8 dans une procédure événementielle.... Si elle ne fonctionne pas c'est qu'elle à plantée... et de ce fait les proc événementielles sont désactivées.... pour les réactiver, exécuter cette ligne :
Code:
Application.EnableEvents = True

bonne soirée
@+
 
Re : Vba RechercheV

Re,

as tu tenu compte de mon post de 12h50 ? c'est une fois le point d'arrêt positionné sur la 1ère ligne de ta procédure que tu peux te servir de F8 dans une procédure événementielle.... Si elle ne fonctionne pas c'est qu'elle à plantée... et de ce fait les proc événementielles sont désactivées.... pour les réactiver, exécuter cette ligne :
Code:
Application.EnableEvents = True

bonne soirée
@+
Re, oui j'ai fait comme tu m'as dit et la j'ai fait comme ceci (il y a un point d'arrêt en face Private), mais rien avec touche F8.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = True

If Intersect(Target, Range("K35:Z35")) Is Nothing Then Exit Sub
    Dim Worksheet As Worksheet
    Dim rng As Range
    Dim Clients As Worksheet
    Dim x As Range
    Dim Lechemin As String
    Dim MonClasseur As Excel.Workbook
    Dim WB1 As Workbook

    
    Set WB1 = ThisWorkbook
    Lechemin = "C:\Documents and Settings\JFL CONTROLE\Bureau\Mes Clients\Mes Clients"

J'ai donc essayé avec Sub, mais la "erreur 424 objet requis" en face If

Code:
Sub test()
Application.EnableEvents = True

If Intersect(Target, Range("K35:Z35")) Is Nothing Then Exit Sub
    Dim Worksheet As Worksheet
    Dim rng As Range
    Dim Clients As Worksheet
    Dim x As Range
    Dim Lechemin As String
    Dim MonClasseur As Excel.Workbook
    Dim WB1 As Workbook

    
    Set WB1 = ThisWorkbook
    Lechemin = "C:\Documents and Settings\JFL CONTROLE\Bureau\Mes Clients\Mes Clients"

C'est la galère.
@+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
909
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
452
Réponses
15
Affichages
782
Réponses
10
Affichages
776
Retour