Renvoi de donnee, via une recherche
Résolu/Fermé
uly2562
Messages postés
70
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
28 juillet 2014
-
28 juil. 2014 à 09:34
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 29 juil. 2014 à 08:02
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 29 juil. 2014 à 08:02
Bonjour,
je travaille actuellement sur Excel 2007, et je développe un logiciel contenant des grosse macro.
Malheuresement, je bloque sur l'une d'entre elle:
je souhaiterai effectuer une recherche concernant une cellule, et quelle me revoi des valeurs, via une base de donnée.
Une RECHERCHEV me dirais vous :),
Oui, mais le souci, cest que plusieurs ligne correspondent a cette cellule(qui est une référence) or, une recherchev ne renvoie qu'une donnée.
J'aimerai simplement qu'il me retourne toute les lignes, correspondant a cette référence, recherchée au préalable.
Merci de votre attention :)
je travaille actuellement sur Excel 2007, et je développe un logiciel contenant des grosse macro.
Malheuresement, je bloque sur l'une d'entre elle:
je souhaiterai effectuer une recherche concernant une cellule, et quelle me revoi des valeurs, via une base de donnée.
Une RECHERCHEV me dirais vous :),
Oui, mais le souci, cest que plusieurs ligne correspondent a cette cellule(qui est une référence) or, une recherchev ne renvoie qu'une donnée.
J'aimerai simplement qu'il me retourne toute les lignes, correspondant a cette référence, recherchée au préalable.
Merci de votre attention :)
A voir également:
- Renvoi de donnee, via une recherche
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Je recherche une chanson - Guide
- Renvoi mobilis ✓ - Forum telephonie fixe
4 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
28 juil. 2014 à 09:44
28 juil. 2014 à 09:44
Bonjour,
Vous avez le choix :
- La recherchev polyvalente
- La fonction FindAll
Vous avez le choix :
- La recherchev polyvalente
- La fonction FindAll
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
28 juil. 2014 à 14:42
28 juil. 2014 à 14:42
Bonjour Michel,
Bienvenu à toi.
Voici comment j'ai traité le "bouzin" :
1- suppression des formules en S29:X29
2- insertion de la procédure événementielle et de la fonction dans le module de la feuille OFFRE DE PRIX :
A suivre...
Bienvenu à toi.
Voici comment j'ai traité le "bouzin" :
1- suppression des formules en S29:X29
2- insertion de la procédure événementielle et de la fonction dans le module de la feuille OFFRE DE PRIX :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$11" Then Exit Sub
If Target.Value = "" Then Exit Sub
Dim References() As String
Dim ValCherchee As String
Dim Nom_Feuil As String
Dim Plage As String
Dim dl As Long
Dim Test As Boolean
Dim i As Integer
ValCherchee = Target.Value
Nom_Feuil = "BaseDonnée"
With Sheets(Nom_Feuil)
dl = .Range("A" & Rows.Count).End(xlUp).Row
End With
Plage = "A1:A" & dl
'---------------------------------------------------------------
Test = FindAll(ValCherchee, Sheets(Nom_Feuil), Plage, References())
'---------------------------------------------------------------
If Test = True Then
Ligne = Range("S" & Rows.Count).End(xlUp).Row
If Ligne > 28 Then Range("S29:X" & Ligne).Clear
Ligne = 28
For i = 1 To UBound(References)
With Sheets(Nom_Feuil)
Ligne = Ligne + 1
Range("S" & Ligne).Value = .Range("A" & References(i)).Value
Range("T" & Ligne).Value = .Range("C" & References(i)).Value
Range("U" & Ligne).Value = .Range("D" & References(i)).Value
Range("V" & Ligne).Value = .Range("E" & References(i)).Value
Range("W" & Ligne).Value = .Range("F" & References(i)).Value
Range("X" & Ligne).Value = .Range("G" & References(i)).Value
End With
Next
End If
End Sub
Function FindAll(ByVal sText As String, ByRef oSht As Worksheet, ByRef sRange As String, ByRef arMatches() As String) As Boolean
' --------------------------------------------------------------------------------------------------------------
' FindAll - To find all instances of the1 given string and return the row numbers.
' If there are not any matches the function will return false
' --------------------------------------------------------------------------------------------------------------
On Error GoTo Err_Trap
Dim rFnd As Range ' Range Object
Dim iArr As Integer ' Counter for Array
Dim rFirstAddress ' Address of the First Find
' -----------------
' Clear the Array
' -----------------
Erase arMatches
Set rFnd = oSht.Range(sRange).Find(what:=sText, LookIn:=xlValues, lookAt:=xlPart)
If Not rFnd Is Nothing Then
rFirstAddress = rFnd.Address
Do Until rFnd Is Nothing
iArr = iArr + 1
ReDim Preserve arMatches(iArr)
arMatches(iArr) = rFnd.Row 'rFnd.Address pour adresse complete ' rFnd.Row Pour N° de ligne
Set rFnd = oSht.Range(sRange).FindNext(rFnd)
If rFnd.Address = rFirstAddress Then Exit Do ' Do not allow wrapped search
Loop
FindAll = True
Else
' ----------------------
' No Value is Found
' ----------------------
FindAll = False
End If
' -----------------------
' Error Handling
' -----------------------
Err_Trap:
If Err <> 0 Then
MsgBox Err.Number & " " & Err.Description, vbInformation, "Find All"
Err.Clear
FindAll = False
Exit Function
End If
End Function
A suivre...
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
28 juil. 2014 à 15:01
28 juil. 2014 à 15:01
je vais faire le mien sans regarder ton code pour ne pas être influencer ! ;o)
uly2562
Messages postés
70
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
28 juillet 2014
1
28 juil. 2014 à 15:05
28 juil. 2014 à 15:05
J'ai donc essayé de créer une macro avec ce code, mais il m'affiche des erreur de synthaxe :/
je ne peut donc pas vérifier si cela fonctionne
je ne peut donc pas vérifier si cela fonctionne
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
28 juil. 2014 à 15:17
28 juil. 2014 à 15:17
Voici un fichier à partir de ton classeur.
Les références en colonne AB ont été placées là à des fins de test...
Une amélioration possible : message à l'utilisateur en cas d'erreur de saisie si référence non trouvée...
@Michel : je vais faire le mien sans regarder ton code pour ne pas être influencer ! ;o)
Bien entendu ;-).
Et , comme d'hab, j'attends celui-ci impatiemment.
Les références en colonne AB ont été placées là à des fins de test...
Une amélioration possible : message à l'utilisateur en cas d'erreur de saisie si référence non trouvée...
@Michel : je vais faire le mien sans regarder ton code pour ne pas être influencer ! ;o)
Bien entendu ;-).
Et , comme d'hab, j'attends celui-ci impatiemment.
uly2562
Messages postés
70
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
28 juillet 2014
1
28 juil. 2014 à 15:25
28 juil. 2014 à 15:25
Les deux fichier sont bien autant l'un que l'autre, :)
Même si j'ai une petite préference pour celui de pijaku
en tout merci a vous deux de votre altruisme, et d'avoir pris de votre temps pour résoudre mon problème
Même si j'ai une petite préference pour celui de pijaku
en tout merci a vous deux de votre altruisme, et d'avoir pris de votre temps pour résoudre mon problème
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
28 juil. 2014 à 15:26
28 juil. 2014 à 15:26
ça veut dire quoi ça?
Je n'ai pas encore vu celui de Michel........
Et si tu attendais les propositions des internautes bénévoles qui cherchent pour toi...
Je n'ai pas encore vu celui de Michel........
Et si tu attendais les propositions des internautes bénévoles qui cherchent pour toi...
uly2562
Messages postés
70
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
28 juillet 2014
1
28 juil. 2014 à 15:29
28 juil. 2014 à 15:29
Et bien j'ai testé les deux méthodes dans mon fichier excel,
et il répondent tous deux a leur objectifs,
autant pour moi si je t'ai vexé, ca n'etait pas dans mon attention...
et il répondent tous deux a leur objectifs,
autant pour moi si je t'ai vexé, ca n'etait pas dans mon attention...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
Modifié par pijaku le 28/07/2014 à 15:40
Modifié par pijaku le 28/07/2014 à 15:40
Je ne suis pas vexé. Nous sommes deux sur le sujet, tu prends la solution que tu veux.
Je sors néanmoins de mes gonds parce que :
1- là, Michel est parti avec ton fichier sous le bras pour te bricoler une troisième possibilité (peut être, surement même), et que tu ne l'attendes pas.
2- Je me rends compte, après coup, que votre sujet est en fait UN DOUBLON vous n'aviez qu'à relancer f89...
3- qu'il y a déjà eu une "petite histoire" de plagiat entre nous 3 => Je ferais attention dans les jours a venir ;), et tacherais de rectifier le tir
==> aucun tir n'a été rectifié dans le fichier que vous fournissez comme étant le votre...
ça commence à faire pas mal non?
Je sors néanmoins de mes gonds parce que :
1- là, Michel est parti avec ton fichier sous le bras pour te bricoler une troisième possibilité (peut être, surement même), et que tu ne l'attendes pas.
2- Je me rends compte, après coup, que votre sujet est en fait UN DOUBLON vous n'aviez qu'à relancer f89...
3- qu'il y a déjà eu une "petite histoire" de plagiat entre nous 3 => Je ferais attention dans les jours a venir ;), et tacherais de rectifier le tir
==> aucun tir n'a été rectifié dans le fichier que vous fournissez comme étant le votre...
ça commence à faire pas mal non?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
28 juil. 2014 à 15:41
28 juil. 2014 à 15:41
ps : je n'attends ici que pour voir la réponse de Michel_m
uly2562
Messages postés
70
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
28 juillet 2014
1
Modifié par uly2562 le 28/07/2014 à 15:46
Modifié par uly2562 le 28/07/2014 à 15:46
oui... je le consoit, et j'en suis désolé...
je n'ai pas encore pris l'habitude de mettre le titre de l'auteur, lorsque je publie mon fichier.
Alors que je l'ai moi même fais sur mon pc.
Une facheuse habitude, que j'arrive pas encore a faire disparaître
encore dsl
Et pour moi, ca ,n'est pas un doublon, car dans l'ancien topic, la recherche concernait une zone de texte (textbox_1) et non une cellule, comme aujourd'hui
Peut être pas pour vous, mais pour moi, ca a tous changé. :/
je n'ai pas encore pris l'habitude de mettre le titre de l'auteur, lorsque je publie mon fichier.
Alors que je l'ai moi même fais sur mon pc.
Une facheuse habitude, que j'arrive pas encore a faire disparaître
encore dsl
Et pour moi, ca ,n'est pas un doublon, car dans l'ancien topic, la recherche concernait une zone de texte (textbox_1) et non une cellule, comme aujourd'hui
Peut être pas pour vous, mais pour moi, ca a tous changé. :/
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
Modifié par michel_m le 28/07/2014 à 15:49
Modifié par michel_m le 28/07/2014 à 15:49
Si je dérange trop, tu le dis, Uly , ou arrête de fumer, tu planes et baisse le son de cette musique rasta.... :o)
il faut mettre au préalable la colonne X au format nombre désiré ou incoporer une petite ligne dans le code
Michel
Option Explicit
'-----
Sub rechercher_svt_reference()
Dim Ref As String
Dim Nbre_ref As Integer, Ligne As Integer, T_ref
Application.ScreenUpdating = False
Ref = Sheets("Offre de prix").Range("B11")
If Ref = "" Then GoTo vide
'---- recherche des Références
With Sheets("basedonnée")
Nbre_ref = Application.CountIf(.Columns("A"), Ref)
If Nbre_ref = 0 Then GoTo inconnu
Ligne = .Columns("A").Find(Ref, Range("A1"), xlValues).Row
'mémorisation de toutes les données données de la référence
T_ref = .Range(.Cells(Ligne, "A"), Cells(Ligne + Nbre_ref - 1, "F"))
End With
'-------- Restitution des données sélectionnées dans l'offre de prix
With Sheets("Offre de prix")
.Range("S29:X15000").Clear
With .Range("S29").Resize(Nbre_ref, 6)
.Value = T_ref
.Borders.Weight = xlThin
.applicate
End With
End With
Exit Sub
'----gestion erreurs
vide:
MsgBox " aucune référence saisie !", vbCritical
Exit Sub
inconnu:
MsgBox "Référence inconnue dans la base de données", vbCritical
End Sub
il faut mettre au préalable la colonne X au format nombre désiré ou incoporer une petite ligne dans le code
Michel
uly2562
Messages postés
70
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
28 juillet 2014
1
28 juil. 2014 à 15:51
28 juil. 2014 à 15:51
Merci pour le code,
Mais pourquoi un tel jugement au début de ton message ?
Mais pourquoi un tel jugement au début de ton message ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
28 juil. 2014 à 15:55
28 juil. 2014 à 15:55
C'est pas vrai !!!!
relis toi un peu
et tu te présentes comme visionnaire ?
relis toi un peu
et tu te présentes comme visionnaire ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
28 juil. 2014 à 15:56
28 juil. 2014 à 15:56
@Michel : Effectivement, une troisième solution. Qui nécessite cependant que la feuille BaseDonnées soit triée au préalable ;-) Mais elle tient compte de cette possibilité d'Excel. Excel d'abord, VBA ensuite...
@uly : pourquoi un tel jugement au début de ton message ?
pour ceci je penses : non?
Sujet résolu
@uly : pourquoi un tel jugement au début de ton message ?
pour ceci je penses : non?
Sujet résolu
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
28 juil. 2014 à 18:18
28 juil. 2014 à 18:18
en rentrant juste avant l'averse:
je lui avais demandé si les références étaient groupées et il m'avait répondu: oui
https://forums.commentcamarche.net/forum/affich-30572697-renvoi-de-donnee-via-une-recherche#6
je lui avais demandé si les références étaient groupées et il m'avait répondu: oui
https://forums.commentcamarche.net/forum/affich-30572697-renvoi-de-donnee-via-une-recherche#6
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
29 juil. 2014 à 07:54
29 juil. 2014 à 07:54
Salut Michel,
Cela illustre, une fois de plus, "pensez Excel avant de penser VBA".
Dans le cas de ton code, tu penses Excel même lorsque l'on "nage" en plein VBA.
Ici, tu traites le problème en fonction du tri déjà établi (tri natif d'Excel). Ne te restes donc qu'à trouver la première occurrence (find = rechercher d'Excel) et le nombre d'occurrences. Encore une fois, pour cela, tu utilises une fonction native d'Excel NB.SI (Application.CountIf).
Très bonne analyse.
Cela illustre, une fois de plus, "pensez Excel avant de penser VBA".
Dans le cas de ton code, tu penses Excel même lorsque l'on "nage" en plein VBA.
Ici, tu traites le problème en fonction du tri déjà établi (tri natif d'Excel). Ne te restes donc qu'à trouver la première occurrence (find = rechercher d'Excel) et le nombre d'occurrences. Encore une fois, pour cela, tu utilises une fonction native d'Excel NB.SI (Application.CountIf).
Très bonne analyse.
28 juil. 2014 à 09:56
Jai regardé les deux fonction,
Mais d'après toi, quelle serait la plus simple a adapter a mon fichier :/
28 juil. 2014 à 10:14
28 juil. 2014 à 10:58
Je vous fais parvenir mon fichier Excel en pièce jointe d'ici 1h30
en tous cas, merci de votre attention a mon problème
Cordialement, uly2562
Modifié par uly2562 le 28/07/2014 à 12:35
Voila le fichier ci-joint :)
Je vous ai mi une petite explication précise de mon problème,
en ésperant qu'elle soit le plus explicite possible.
Cordialement, uly2562
Modifié par michel_m le 28/07/2014 à 14:31
tes références sont elles toujours groupées dans la base de données ?
Edit:
Et est ce normal d'avoir 2 colonnes "désignation" identiques dans la base de données ?