[Résolu] Problème avec RECHERCHEV et doublons

filou54110

XLDnaute Nouveau
Bonjour et je me presente je suis debutant de 43 ans
et j ai un problème pas facil a expliquer

merci de votre aide


Sur la colonne A "client" et les codes clients enregistrer avec la commande, d ou des doublons et mes colonnes B à M sont les réferences saisie lors du bon de commande j'essaye de trouve une formule,j ai parcouru le forum et sur google l ami, j ai essayer avec RECHERCHEV mais je n'y parviens pas : rechercher le client ex:0001 et retrouver tout les articles sans doublons et les reunir ( donc je devrais retrouver une seule ligne avec comme client "0002" et les réference 802406 et 802405 et une autre avec le client 0001 et les réferences 802405 802406 802407 )je n'ai toujour pas trouver de solution merci d avance


je vous joint une pièce jointe
qui et surement plus parlante
Merci d avance
 

Pièces jointes

  • phi.pro.xls
    22.5 KB · Affichages: 52
Dernière édition:

filou54110

XLDnaute Nouveau
Re : Problème avec RECHERCHEV et doublons

Bonjour Rachid_0661
Merci pour cette réponse si rapide
J'ai oublier de préciser que je suis sur office 2003 et parfois 2007
Donc pour l instant de mon boulot"Office 2003" je l'ouvre avec des erreurs "#NOM?" qui me semble normale , vue la version pas encore essayer de l ouvrir avec 2007 je le ferais a la maison
Je ne voudrais surtout pas Abuser de ton temps , mets le tableaux rajouter en "A8:M8" peux t'il être déplacer en "O1:AA1"
Merci beaucoup de l'aide
j ai regarder les formules et je vois que j ai encore beaucoup à apprendre


Merci Beaucoup
Super ce forum, et super d'apporter vos connaissances
Filou
 

job75

XLDnaute Barbatruc
Re : Problème avec RECHERCHEV et doublons

Bonjour filou54110, salut Rachid :)

Une solution VBA (Alt+F11) :

Code:
Sub Recap()
Dim h&, lig&, i&, d As Object, ref As Range
Application.ScreenUpdating = False
ActiveSheet.AutoFilterMode = False
h = [A65536].End(xlUp).Row 'hauteur du tableau
[O2:AA65536].ClearContents 'RAZ
lig = 2 '1ère ligne à remplir
For i = 2 To h
  If Application.CountIf([A1].Resize(i - 1), Cells(i, 1)) = 0 Then 'NB.SI
    [A1].Resize(h).AutoFilter 1, Cells(i, 1).Text 'filtre automatique
    Set d = CreateObject("Scripting.Dictionary")
    For Each ref In [A2:M2].Resize(h - 1).SpecialCells(xlCellTypeVisible)
      If Trim(ref) <> "" Then d(ref.Value) = ref.Value
    Next
    If d.Count Then
      Cells(lig, "O").Resize(, d.Count) = d.keys
      lig = lig + 1
    End If
  End If
Next
ActiveSheet.AutoFilterMode = False 'désactive le filtre
Application.Goto [O1], True 'facultatif
End Sub
Fichier joint.

A+
 

Pièces jointes

  • phi.pro(1).xls
    56 KB · Affichages: 45

filou54110

XLDnaute Nouveau
Re : Problème avec RECHERCHEV et doublons

Bonjour Rachid_0661
Bonjour job75
Bonjour le forum
Merci Job75 ; je n'est plus qu'a édudier attentivement le code VBA
C'est extactement ce que je voulais
Merci Beaucoup
Quel rapidité et éficacité
Je vous souhaite une bonne Journée
Vraiment que des pros sur ce forum
Merci
Filou
 

filou54110

XLDnaute Nouveau
Re : Problème avec RECHERCHEV et doublons

Bonjour Rachid_0661
Et bonjour job75
Bonjour au forum

Merci Job75, exactement ce que je chercher
Je vais pouvoir étudier ton code VBA
Et Merci Rachid_0661
Je vais aussi étudier les formules

Merci a vous deux
De vrais pros,
Une rapidité et une incroyable efficacité
Merci
Bonne Journée
Je clôture ce sujet
Qui m’as vraiment beaucoup aidé

Filou
 

filou54110

XLDnaute Nouveau
Re : Problème avec RECHERCHEV et doublons

Re bonjour
j ai une dernière question
si le code en VBA je veux le mettre sur une autre feuille mets qui intervienne sur la feuille en question
faut il rajouter une instruction de depart et de retour
car je voudrais l inclure dans le code vba que j ai deja dans l'autre feuille qui me remplit les lignes "Client"REF1" ect.. et qui continue le reste
je mets un bout de code pour mieux comprendre

et je voudrais y rajouter ce fameux code VBA

Sub Recap()
Dim h&, lig&, i&, d As Object, ref As Range
Application.ScreenUpdating = False
ActiveSheet.AutoFilterMode = False
h = [A65536].End(xlUp).Row 'hauteur du tableau
[O2:AA65536].ClearContents 'RAZ
lig = 2 '1ère ligne à remplir
For i = 2 To h
If Application.CountIf([A1].Resize(i - 1), Cells(i, 1)) = 0 Then 'NB.SI
[A1].Resize(h).AutoFilter 1, Cells(i, 1).Text 'filtre automatique
Set d = CreateObject("Scripting.Dictionary")
For Each ref In [A2:M2].Resize(h - 1).SpecialCells(xlCellTypeVisible)
If Trim(ref) <> "" Then d(ref.Value) = ref.Value
Next
If d.Count Then
Cells(lig, "O").Resize(, d.Count) = d.keys
lig = lig + 1
End If
End If
Next
ActiveSheet.AutoFilterMode = False 'désactive le filtre
Application.Goto [O1], True 'facultatif
End Sub

La feuille "Analyse" et la feuille en question
et la feuille "Enregistrer_commande" et la ou il y as ce code
et qui enregistre aussi sur une feuille "LISTING"

Sub Enregistrer_Click()
Dim Ligne As Long

Ligne = Sheets("analyse").Range("A" & Rows.Count).End(xlUp).Row + 1



Sheets("analyse").Range("A" & Ligne).Value = Sheets("Enregistrer_commande").Range("G8").Value
Sheets("analyse").Range("B" & Ligne).Value = Sheets("Enregistrer_commande").Range("C15").Value
Sheets("analyse").Range("C" & Ligne).Value = Sheets("Enregistrer_commande").Range("C16").Value
Sheets("analyse").Range("D" & Ligne).Value = Sheets("Enregistrer_commande").Range("C17").Value
Sheets("analyse").Range("E" & Ligne).Value = Sheets("Enregistrer_commande").Range("C18").Value
Sheets("analyse").Range("F" & Ligne).Value = Sheets("Enregistrer_commande").Range("C19").Value
Sheets("analyse").Range("G" & Ligne).Value = Sheets("Enregistrer_commande").Range("C20").Value
Sheets("analyse").Range("H" & Ligne).Value = Sheets("Enregistrer_commande").Range("C21").Value
Sheets("analyse").Range("I" & Ligne).Value = Sheets("Enregistrer_commande").Range("C22").Value
Sheets("analyse").Range("J" & Ligne).Value = Sheets("Enregistrer_commande").Range("C23").Value
Sheets("analyse").Range("K" & Ligne).Value = Sheets("Enregistrer_commande").Range("C24").Value
Sheets("analyse").Range("L" & Ligne).Value = Sheets("Enregistrer_commande").Range("C25").Value
Sheets("analyse").Range("M" & Ligne).Value = Sheets("Enregistrer_commande").Range("C26").Value

On Error GoTo Blème

myyear = Year(Range("H5"))

couryear = Year(Now)
If myyear = couryear Then GoTo suite Else MsgBox ("ATTENTION! soit tu as rentré une date qui n'appartient pas à l'année en cours, soit tu n'as pas respecté le format de date (JJ/MM/AA), soit tu as oublié d'inscrire la date !")
Range("H5").ClearContents
Exit Sub
suite:

Style = vbOKCancel
Reponse = MsgBox("As-tu bien tout vérifié, parce qu'après c'est plus compliqué de modifier (il faut aller tel à son frère !!). Si c'est bon, clique sur OK ", Style)
If Reponse = vbCancel Then Exit Sub

ActiveSheet.Unprotect
Worksheets("LISTING").Select
Worksheets("LISTING").Rows(3).Select
Selection.Insert
Range("A3:DC3").Select
With Selection.Interior
.ColorIndex = 2
.Pattern = xlGray16
.PatternColorIndex = 37
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End With

Range("A3").Select
Range("A3").Formula = "=MAX(A4:A5000)+1"
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Range("A1").Select
'Coordonnées:
Range("B3").Formula = "=Enregistrer_commande!H5"
Range("C3").Formula = "=Enregistrer_commande!J4"
Range("D3").Formula = "=Enregistrer_commande!D8"
Range("E3").Formula = "=Enregistrer_commande!D10"
Range("F3").Formula = "=Enregistrer_commande!J8"
Range("G3").Formula = "=Enregistrer_commande!J12"
Range("H3").Formula = "=Enregistrer_commande!J10"
Range("I3").Formula = "=Enregistrer_commande!G8"
Range("J3").Formula = "=Enregistrer_commande!G10"
Range("K3").Formula = "=Enregistrer_commande!I15"
'produit 1:
Range("L3").Formula = "=Enregistrer_commande!C15"
Range("M3").Formula = "=Enregistrer_commande!B15"
Range("N3").Formula = "=Enregistrer_commande!D15"
Range("O3").Formula = "=Enregistrer_commande!E15"
Range("P3").Formula = "=Enregistrer_commande!F15"
Range("Q3").Formula = "=Enregistrer_commande!G15"
Range("R3").Formula = "=Enregistrer_commande!H15"
Range("S3").Formula = "=Enregistrer_commande!J15"
'produit 2:
Range("T3").Formula = "=Enregistrer_commande!C16"
Range("U3").Formula = "=Enregistrer_commande!B16"
Range("V3").Formula = "=Enregistrer_commande!D16"
Range("W3").Formula = "=Enregistrer_commande!E16"
Range("X3").Formula = "=Enregistrer_commande!F16"
Range("Y3").Formula = "=Enregistrer_commande!G16"
Range("Z3").Formula = "=Enregistrer_commande!H16"
Range("AA3").Formula = "=Enregistrer_commande!J16"
'produit 3:
Range("AB3").Formula = "=Enregistrer_commande!C17"
Range("AC3").Formula = "=Enregistrer_commande!B17"
Range("AD3").Formula = "=Enregistrer_commande!D17"
Range("AE3").Formula = "=Enregistrer_commande!E17"
Range("AF3").Formula = "=Enregistrer_commande!F17"
Range("AG3").Formula = "=Enregistrer_commande!G17"
Range("AH3").Formula = "=Enregistrer_commande!H17"
Range("AI3").Formula = "=Enregistrer_commande!J17"
'produit 4:
Range("AJ3").Formula = "=Enregistrer_commande!C18"
Range("AK3").Formula = "=Enregistrer_commande!B18"
Range("AL3").Formula = "=Enregistrer_commande!D18"
Range("AM3").Formula = "=Enregistrer_commande!E18"
Range("AN3").Formula = "=Enregistrer_commande!F18"
Range("AO3").Formula = "=Enregistrer_commande!G18"
Range("AP3").Formula = "=Enregistrer_commande!H18"
Range("AQ3").Formula = "=Enregistrer_commande!J18"
'produit 5:
Range("AR3").Formula = "=Enregistrer_commande!C19"
Range("AS3").Formula = "=Enregistrer_commande!B19"
Range("AT3").Formula = "=Enregistrer_commande!D19"
Range("AU3").Formula = "=Enregistrer_commande!E19"
Range("AV3").Formula = "=Enregistrer_commande!F19"
Range("AW3").Formula = "=Enregistrer_commande!G19"
Range("AX3").Formula = "=Enregistrer_commande!H19"
Range("AY3").Formula = "=Enregistrer_commande!J19"

et termine
par

'selectionne la feuille des commandes
Worksheets("Enregistrer_commande").Select
Range("H5").Select
Range("H5") = Now


Range("G8").ClearContents
Range("C15:C26").ClearContents
Range("F15:F26").ClearContents
Range("B15:B26").ClearContents



Range("A1").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True


Range("H3").Select
ActiveSheet.Unprotect
Range("H5").Select
ActiveCell.FormulaR1C1 = "=TODAY()"



Exit Sub

Comment je peux introduire le code vba


Merci

Merci job75
merci Rachid_0661
 

R@chid

XLDnaute Barbatruc
Supporter XLD
Re : Problème avec RECHERCHEV et doublons

Salut Filou,
Un grand Salut @ Job75,
@ filou : Biensur ca va pas fonctionner sur Excel2003, et ca va te donner la valeur d'erreur #NOM du fait que la fonction SIERREUR() n'existe pas sur 2003, et voila je me suis servi de cette fonction parceque j'ai vu sur ta discussion [Toutes Versions].
Voir PJ.
pour deplacer le tableau je te propose de decortiquer la formule et essayer de l'adapter a ton besoin.
Amicalement
 

Pièces jointes

  • phi_pro_2003.xls
    37.5 KB · Affichages: 46

job75

XLDnaute Barbatruc
Re : Problème avec RECHERCHEV et doublons

Re,

Pas vraiment étudié votre code, un peu rébarbatif avec ces Select, inutiles en VBA...

Vous mettez la macro Recap dans un Module et vous l'appelez d'où vous voulez par l'instruction :

Call Recap

Mais il y a sans doute lieu de préciser la feuille s'il s'agit bien de la feuille Analyse :

Code:
Sub Recap()
Dim h&, lig&, i&, d As Object, ref As Range
Application.ScreenUpdating = False
With Sheets("Analyse")
  .AutoFilterMode = False
  h = .[A65536].End(xlUp).Row 'hauteur du tableau
  .[O2:AA65536].ClearContents 'RAZ
  lig = 2 '1ère ligne à remplir
  For i = 2 To h
    If Application.CountIf(.[A1].Resize(i - 1), .Cells(i, 1)) = 0 Then 'NB.SI
      .[A1].Resize(h).AutoFilter 1, .Cells(i, 1).Text 'filtre automatique
      Set d = CreateObject("Scripting.Dictionary")
      For Each ref In .[A2:M2].Resize(h - 1).SpecialCells(xlCellTypeVisible)
        If Trim(ref) <> "" Then d(ref.Value) = ref.Value
      Next
      If d.Count Then
        .Cells(lig, "O").Resize(, d.Count) = d.keys
        lig = lig + 1
      End If
    End If
  Next
  .AutoFilterMode = False 'désactive le filtre
  Application.Goto .[O1], True 'facultatif
End With
End Sub
Et adaptez éventuellemment les références des 2 tableaux...

A+
 
Dernière édition:

filou54110

XLDnaute Nouveau
Re : Problème avec RECHERCHEV et doublons

Merci job75
J ai reussi à l'adapter a mon code
je convient que j ai encore beaucoup de lacune en VBA , je suis débutant depuis seulement deux mois
Mes avec des conseils comme vous et Rachid
je progresse , car j'étudie vos réponses et je fais des recherches pour comprendre
j'espère un jour avoir vos connaissances
en tout cas un grand merci à vous deux
je viens d'apprendre beaucoup de choses
et je vais essayer de voir en VBA comment faire pour les "Select" j en convient c'est long à écrire et je ne connais pas encore assez bien VBA , mes je trouverai
Merci Vous etes des vrais pros
et merci des conseils
Amicalement
Filou
 

Discussions similaires

Statistiques des forums

Discussions
314 647
Messages
2 111 533
Membres
111 197
dernier inscrit
john49