recherche sur un fichier

panzerseb

XLDnaute Nouveau
Bonjour a tous,

Aprés avoir épluché toutes les réponses du forum je me décide ( enfin) à poser ma question:

Alors voila je dispose d'un fichier dans lequel il y a des donnés numérique rangé a la fois par région (collone A) et par entité juridique (colone b)
Ce que je souhaite faire c'est une recherche avec double critére puis importer les donnés dans un autre fichier.

Attention les donnés sont importées dans un autre fichier. En fait je dispose déja d'une macro qui va m'ouvrir automatiquement le fichier cherché en fonction d'un certain nombre de critére... Ce que je n'arrive pas a faire c'est une macro de recherche sous vba...Si quelqu'un avait un exemple de code a bidouiller se serait parfait

d'avance merci

seb
 

Gorfael

XLDnaute Barbatruc
Re : recherche sur un fichier

panzerseb à dit:
Bonjour a tous,

Aprés avoir épluché toutes les réponses du forum je me décide ( enfin) à poser ma question:

Alors voila je dispose d'un fichier dans lequel il y a des donnés numérique rangé a la fois par région (collone A) et par entité juridique (colone b)
Ce que je souhaite faire c'est une recherche avec double critére puis importer les donnés dans un autre fichier.

Attention les donnés sont importées dans un autre fichier. En fait je dispose déja d'une macro qui va m'ouvrir automatiquement le fichier cherché en fonction d'un certain nombre de critére... Ce que je n'arrive pas a faire c'est une macro de recherche sous vba...Si quelqu'un avait un exemple de code a bidouiller se serait parfait

d'avance merci

seb
Salut
Un peu vague, mais on peut extrapoler un code
critère de recherche soit par input, soit par 2 cellules.
Pour suivre ; les données :
Classeur 1
A2:Ax région
B2:BX entité juridique
C2:Cx les données
Classeur 2
A1 : critère région
B1: Critère entité juridique

On est dans le classeur 2 et on lance la macro (il faut vérifier la présence de données, ou si on autorise un seul critère, les garde-fou classiques, mais pas assez de données donc, il faudra y penser)

Dim Crit_Rég as string
Dim Crit_Jur as string
Dim X as Long
.........
Crit_Rég = Range("A1")
Crit_Jur = Range("B1")
Windows("Classeur 1").Activate
For X=2 to range("A65536").End(xlUp).row
if Range("A" & x)=Crit_Rég and Range("B" & x) = Crit_Jur Then
Range(Range("A" & x),Range("C" & x)).copy
Windows("Classeur 2").Activate
range("A65536").End(xlUp).offsett1,0).select
Activesheet.Paste
Windows("Classeur 1").Activate
Endif
next x
.......

A+
 
Dernière édition:

panzerseb

XLDnaute Nouveau
Re : recherche sur un fichier

oulah.......
Bon bah merci pour le code ( je sais me servir de vba, mais là ya des lignes que je comprend pas du tout...)

En tout cas merci beaucoup de t'être penché sur la question je vais essayé d'adapter ce code!

Je te tiens au courant

bonne journée

seb:)
 

Gorfael

XLDnaute Barbatruc
Re : recherche sur un fichier

panzerseb à dit:
oulah.......
Bon bah merci pour le code ( je sais me servir de vba, mais là ya des lignes que je comprend pas du tout...)

En tout cas merci beaucoup de t'être penché sur la question je vais essayé d'adapter ce code!

Je te tiens au courant

bonne journée

seb:)
re...
Et alors ? moi non plus, avant de savoir je ne savais pas :)
explication

Dim Crit_Rég as string
Dim Crit_Jur as string

Déclaration des variables en tant que texte
Dim X as Long
Déclaration de variable en tant qu'entier long pour pouvoir atteindre la ligne 65536 si nécessaire
.........
Crit_Rég = Range("A1")
Crit_Jur = Range("B1")
On charge les 2 variables avec les valeurs à rechercher

Windows("Classeur 1").Activate
on change de classeur

For X=2 to range("A65536").End(xlUp).row
Pour X=2 à la dernière ligne de A non-vide

if Range("A" & x)=Crit_Rég and Range("B" & x) = Crit_Jur Then
Si la cellule Ax = variable région et la cellule Bx = critère juridique alors
Attention pour que le test soit bon, il faut que les 2 variables soient conformes. Si l'une ou l'autre ne correspond pas à son critère, on saute à la ligne End If directement sans faire les instructions entre

Range(Range("A" & x),Range("C" & x)).copy
On copie les cellules de Ax:Cx : si tu veux copier jusqu'à H, tu remplaces le C par H

Windows("Classeur 2").Activate
on rechange de classeur

range("A65536").End(xlUp).offset(1,0).select
range("A65536").End(xlUp) ça correspond sous excel à aller à la dernière cellule de A et de faire Ctrl+flèche vers le haut le curseur s'arrête sur la première cellule non-vide de A
Offset(1,0) par rapport à la référence, se décaler d'une ligne et de 0 colonne
l'instruction totale place le curseur sur la dernière ligne vide en partant du bas

Activesheet.Paste
Coller ce qu'on a copier plus haut

Windows("Classeur 1").Activate
Changer de classeur

Endif
Fin du test

next x
Fin de la boucle

Plus compréhensible ?

A+

PS Oups, je viens de corriger une erreur dans ma macro (Offset marche mieux que offsett :) )
 
Dernière édition:

panzerseb

XLDnaute Nouveau
Re : recherche sur un fichier

bon sa marche
seule 2 petit probléme persiste:
Je ne cherche que les valeurs en a1 et b1 avec cette formule hors moi j'ai besoin d'aller chercher une dizaine de combinaison diférentes
ou en d'autre termes:
j'ai besoin de a1 b1, a2 et b2,... a10, b10
dois je recopier 10 fois la macro?

Autre probléme la macro compléte les valeurs sous mon tableau de recherche... hors moi je voudrais que les résultats s'affiche a droite de a et b

merci de ton aide
 

Gorfael

XLDnaute Barbatruc
Re : recherche sur un fichier

panzerseb à dit:
bon sa marche
seule 2 petit probléme persiste:
Je ne cherche que les valeurs en a1 et b1 avec cette formule hors moi j'ai besoin d'aller chercher une dizaine de combinaison diférentes
ou en d'autre termes:
j'ai besoin de a1 b1, a2 et b2,... a10, b10
dois je recopier 10 fois la macro?

Autre probléme la macro compléte les valeurs sous mon tableau de recherche... hors moi je voudrais que les résultats s'affiche a droite de a et b

merci de ton aide
Re...
J'ai besoin de:
le nom du classeur source
Le nom du classeur destination
la 1re colonne de destination où on doit copier et quelles colonnes de la source on doit copier
la celllule du premier critère
Si dans la colonne du premier critère tu as d'autres données, la dernière cellule de critère. Si au-dessus c'est vide, pas la peine de définir des limites, ça sera la dernière

les tests : si tu veux qu'il soit absolu ou si tu veux pouvoir mettre des termes générique (* ou ?)

A+
 
Dernière édition:

panzerseb

XLDnaute Nouveau
Re : recherche sur un fichier

J'ai besoin de:
le nom du classeur source
En fait son nom varie tous les mois donc je le saisie a un endroit que j'appel fichier 2 Windows(Range("fichier2").Value)

Le nom du classeur destination
la c'est fixes il s'appel ("Kpi Transport.xls")

la 1re colonne de destination où on doit copier

collone "c"

et quelles colonnes de la source on doit copier

"c" et "n"

la celllule du premier critère

le premier critére est en b1 les info que je cherche sont sur b1 c1
Si dans la colonne du premier critère tu as d'autres données, la dernière cellule de critère. Si au-dessus c'est vide, pas la peine de définir des limites, ça sera la dernière

les tests : si tu veux qu'il soit absolu ou si tu veux pouvoir mettre des termes générique (* ou ?)

je veux récupéré les valeurs strictement

A+
 

Gorfael

XLDnaute Barbatruc
Re : recherche sur un fichier

panzerseb à dit:
J'ai besoin de:
le nom du classeur source
En fait son nom varie tous les mois donc je le saisie a un endroit que j'appel fichier 2 Windows(Range("fichier2").Value)

Le nom du classeur destination
la c'est fixes il s'appel ("Kpi Transport.xls")

la 1re colonne de destination où on doit copier

collone "c"

et quelles colonnes de la source on doit copier

"c" et "n"

la celllule du premier critère

le premier critére est en b1 les info que je cherche sont sur b1 c1
Si dans la colonne du premier critère tu as d'autres données, la dernière cellule de critère. Si au-dessus c'est vide, pas la peine de définir des limites, ça sera la dernière

les tests : si tu veux qu'il soit absolu ou si tu veux pouvoir mettre des termes générique (* ou ?)

je veux récupéré les valeurs strictement

A+
re..
Récap de ce que j'ai compris
Cl1 = source = Windows(Range("fichier2")
Zone de critère recherchés : B1:Cn avec n première ligne non-vide en partant du bas
Cellules à copier C et N
Pb 1 : ça me gène de ne pas copier les 2 critères,, j'aime bien contrôler, surtout en cas de multi ctitères
Pb 2 : C et N ou de C à N
Confirme que c'est bien C et N uniquement


Cl2 = destination = "Kpi Transport.xls"
Plage de critère de recherche : A1:Bn avec n première ligne non vide en partant du bas
destination des résultat : à partir de la colonne C
Question : on remt à zéro la liste des résultats à chaque nouvelle recherche ? On on continue à la suite avec une RAZ manuelle (la 1re me semble plus logique, mais je n'utilise pas) ?

Juste une petite remarque : au lieu de mettre les critère de recherche en A1,B1 / A2,B2 / on pourrait commencer seulement en A2/B2 libérant la place A1/B1 pour y mettre le bouton de lancement de la macro de recherche.

A+
 

panzerseb

XLDnaute Nouveau
Re : recherche sur un fichier

c'est bien c et n uniquement...
le mieux serait que les valeurs chargé précédement ne soit pas éffacé...

Toutes le finalité de ce travail et de pouvoir récupéré des donnés sur des feuilles tous les mois afin de réliser des graphiques d'évolution... si tu as des exemples de ce genre de chose a me transmettre se serait vraiement cool.

Merci pour ton aide

seb
 

Gorfael

XLDnaute Barbatruc
Re : recherche sur un fichier

Salut panzerseb
2 macros à inclure dans un module général

Code:
Sub Transfert_Test()
On Error GoTo Err_Transfert_Test
Dim F_S As Worksheet
Dim F_D As Worksheet
Dim Tab_C() As String
Dim X As Long
Dim Y As Long
Dim Lig As Long
Dim Cl_Source As String
Dim Cl_Destination As String

Cl_Destination = "Kpi Transport.xls"
Cl_Source = Range("fichier2")

'Chargement des critères
Windows(Cl_Destination).Activate
Set F_D = Sheets("feuil1")
F_D.Activate

'test de validité
X = Range("A65536").End(xlUp).Row
If X < 2 Then GoTo Sort_Transfert_Test

Application.EnableEvents = False
Application.ScreenUpdating = False

'chargement
ReDim Tab_C(1 To 2, 1 To X - 1)
For Y = 2 To X
    Tab_C(1, Y - 1) = Range("A" & Y)
    Tab_C(2, Y - 1) = Range("B" & Y)
Next Y
Lig = Range("C65536").End(xlUp).Row
Lig = IIf(Lig = 1, 1, Lig + 1)

'Recherche
'MEI
Windows(Cl_Source).Activate
Set F_S = Sheets("feuil1")
For X = 1 To Range("B65536").End(xlUp).Row
    For Y = 1 To UBound(Tab_C, 2)
        'si on veut tenir compte des majuscules/minuscules
        If F_S.Range("B" & X) = Tab_C(1, Y) And _
                   F_S.Range("C" & X) = Tab_C(2, Y) Then
        'si on ne veut pas tenir compte des majuscules/minuscules
        'If UCase(F_S.Range("B" & X)) = UCase(Tab_C(1, Y)) And _
        '           UCase(F_S.Range("C" & X)) = UCase(Tab_C(2, Y)) Then
           F_D.Range("C" & Lig) = F_S.Range("C" & X)
           F_D.Range("D" & Lig) = F_S.Range("N" & X)
           Lig = Lig + 1
        End If
    Next
Next X

Windows(Cl_Destination).Activate

Sort_Transfert_Test:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Exit Sub
Err_Transfert_Test:
    MsgBox (Err.Number & " - " & Err.Description)
    Resume Sort_Transfert_Test
End Sub
Cette macro fait la recherche
Si tu ne tiens pas compte des majuscules/minuscules, tu mets une apostrophe aux deux lignes de tests et tu enlèves les apostrophes des 2 lignes de test suivantes (text avec UCASE

tiens compte (ce que j'ai mis dans le code
'si on veut tenir compte des majuscules/minuscules
If F_S.Range("B" & X) = Tab_C(1, Y) And _
F_S.Range("C" & X) = Tab_C(2, Y) Then
'si on ne veut pas tenir compte des majuscules/minuscules
'If UCase(F_S.Range("B" & X)) = UCase(Tab_C(1, Y)) And _
' UCase(F_S.Range("C" & X)) = UCase(Tab_C(2, Y)) Then

ne tiens pas compte
'si on veut tenir compte des majuscules/minuscules
'If F_S.Range("B" & X) = Tab_C(1, Y) And _
' F_S.Range("C" & X) = Tab_C(2, Y) Then
'si on ne veut pas tenir compte des majuscules/minuscules
If UCase(F_S.Range("B" & X)) = UCase(Tab_C(1, Y)) And _
UCase(F_S.Range("C" & X)) = UCase(Tab_C(2, Y)) Then



Code:
Sub Raz_Liste()
Range("C1:D1").ClearContents
If Range("A1").SpecialCells(xlCellTypeLastCell).Row > 1 Then _
        Rows("2:" & Range("A1").SpecialCells(xlCellTypeLastCell).Row).Delete
End Sub
cette macro permet de remettre à zéro la feuille destination

A+
 

panzerseb

XLDnaute Nouveau
Re : recherche sur un fichier

Merci beaucoup!!

Je vais essayé de m'en sortir avec sa
Par contre je ne retrouve pas les similitudes avec la macro précédente?
Je ne comprend aps pourquoi deux macro en théorie pas si différentes l'une de l'autre sont si différente d'un point de vu fonctionalité....

Encore merci

Je te tiens au courant pour la mise en place du code...
 

Gorfael

XLDnaute Barbatruc
Re : recherche sur un fichier

panzerseb à dit:
Merci beaucoup!!

Je vais essayé de m'en sortir avec sa
Par contre je ne retrouve pas les similitudes avec la macro précédente?
Je ne comprend aps pourquoi deux macro en théorie pas si différentes l'une de l'autre sont si différente d'un point de vu fonctionalité....

Encore merci

Je te tiens au courant pour la mise en place du code...
re...
Le code est plus ou moins le même.
Mais par exemple, la copie : dans la première, je copie 2 cellules cote-à-cote
j'utilise un copier/coller

dans la deuxième, ce sont des cellules disjointes, donc je préfère transmettre les valeurs, surtout pour éviter de passer d'un classeur à l'autre sans arrêt.

Et puis, quelque part, ça te permet de voir qu'il il a plusieurs possibilités et te donne des idées de code. C'est rare que qulequ'un qui touche à la programmation arrive à s'en sevrer :)
Et il ne faut surtout pas oublier que moi aussi, j'apprends ;)
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 763
Messages
2 091 826
Membres
105 076
dernier inscrit
simeand