Filtre a partir d'une liste et ajout d'élément manquant
Bonjour tous le monde,
Je me permets de solliciter votre aide. Je pense que le problème a déjà dû être posté quelque parts, mais impossible de trouver quoique ce soit (ici où ailleurs) peut être ai-je mal formulé ma recherche. c'est pourquoi je me décide finalement a appeler a l'aide.
dans un tableau variable, il y aune colonne Famille qui comprend des famille de produits (informatique et telephonie)
Je dois filtrer cette colonne en fonction des produits.
J'ai déjà scripté cette partie (voir fichier joint)
ce que je souhaiterai c'est que si un élément apparaît dans la colonne FAMILLE mais qu'il n'est présent ni dans la file micro ni dans la file téléphonie, qu'il me demande dans quelle file l'ajouter.
J'espère avoir été assez clair mais ce n'est pas évident a expliquer comme ça sans le fichier sous les yeux.
En vous remerciant de l'aide que vous pourriez m'apporter.
Cordialement
Bargoth
Bonjour,
à mettre dans le module de FILE :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pl As Range, c As Range, c2 As Range, rep As Long, col As Long
Set pl = Intersect(Target, [C6:C1000])
If pl Is Nothing Then Exit Sub
With Sheets("Lists")
For Each c In pl
Set c2 = .Columns(2).Find(c, LookIn:=xlValues, Lookat:=xlWhole)
If c2 Is Nothing Then
Set c2 = .Columns(4).Find(c, LookIn:=xlValues, Lookat:=xlWhole)
If c2 Is Nothing Then
rep = MsgBox("Ajouter à Micro ?", vbQuestion + vbYesNoCancel, "Choix liste Micro/Tel")
col = 0
If rep = vbYes Then
col = 2
ElseIf rep = vbNo Then
col = 4
End If
If col > 0 Then
.Cells(Rows.Count, col).End(xlUp).Offset(1) = c.Value
End If
End If
End If
Next c
End With
End SubLe contrôle s'effectue au moment de l'ajout.
Oui : ajout dans Micro, Non : ajout dans Tel, Annuler : n'ajoute pas
eric
Super merci pour ta réactivité Eric.
ça fonctionne parfaitement bien. par contre, je suis désolé mais j'ai l'impression d'abuser, mais y a t'il une possibilité de faire en sorte qu'il "cherche" la colonne car suivant les extracts qui sont faites, les colonnes ne sont pas au même endroit d'un jour a l'autre
j'ai essayé en début de code de remplacer par:
Dim pl As Range, c As Range, c2 As Range, rep As Long, col As Long, cellfamille As Range
searchcol = "Famille"
Set cellfamille = ActiveSheet.UsedRange.Find(searchcol, , xlValues, xlWhole)
Set pl = Intersect(Target, cellfamille)Mais ça ne fonctionne pas.
Mais surtout ce qui m'interesse ce serai que dans le msgbox, il indique la valeur trouvée et la question.
encore merci de cette aide précieuse.
edit: bon pour la msgbox c'est bon. j'ai mis
rep = MsgBox("La famille " + c.Value + " est inconnu(e)." & Chr(10) & "Voulez vous l'ajouter?" & Chr(10) & "oui pour micro non pour téléphonie", vbQuestion + vbYesNoCancel, "Famille inconnue")est ça fonctionne.
Manque plus qu'a trouver pour les colonnes variables. si jamais il n'y a pas d'idée je mettrais en résolu car la principale demande était bien cette requette et cet ajout.
Si c'est dans List il faudrait peut-être qu'elles aient des titres (?!?)
Précise quoi et où
Oui excuse moi ce n'etait pas très clair.
Tout ce qui concerne l'onglet Lists est fixe. Le choix avec la msgbox que tu m'as proposé est parfait et fonctionne a merveille. En fait ce qui est variable est dans l'onglet FILE. Il s'agit de la colonne avec l'intitulé famille qui ici se trouve colonne C mais qui parfois peut se retrouver dans une autre colonne.
replace le début par :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pl As Range, c As Range, c2 As Range, rep As Long, col As Long
Set c = Cells.Find("Famille", LookIn:=xlValues, Lookat:=xlWhole)
Set pl = Intersect(Target, c.Offset(1).Resize(1000))eric
Super. c'est exactement ce que je voulais.
Maintenant plus qu'a faire qu'il ne mette plus d'erreur quand que j'efface le contenu de la feuille FILE pour remettre autre chose mais ça je vais m'en occuper.
en tout cas ce qui me génais le plus est résolu.
Je te remercie énormément.
edit: Finalement trouvé en ajoutant
If c Is Nothing Then Exit Subjuste en dessous du Set c=...
merci encore