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 !
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
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
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
.......
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 🙂 )
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
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
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 ?)
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 ?)
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 ?)
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.
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.
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
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...
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+
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.