XL 2013 Copier coller sans doublon avec condition

Ayari69700

XLDnaute Nouveau
Bonjour à tous,

En ces temps quelques peu mouvementés.

J'aurais une question sur laquelle je bloque, je voudrais faire un copier d'une plage C28 jusqu'à ce qu'il n'y ait plus de valeur et coller en A4 sans doublon et que si les cellules commencent par #.

Merci par avance et bon courage à tous en ces temps.
 

Pièces jointes

  • METRES AyY macro V1.xlsm
    47.9 KB · Affichages: 9

Staple1600

XLDnaute Barbatruc
Re

Normalement la réponse est oui ... :rolleyes:
Je viens de voir ceci dans ton classeur
VB:
Private Sub CommandButton1_Click()

'    Sheets("WD0_TOUTES_PREST.").Select
'Filtre élaboré sans doublon sur la colonne G (Affaire) vers l'emplacement colonne vide BZ
    Sheets("B").Range("C32:C500").AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Sheets("B").Range("C32:C500"), Unique:=True
        
    'Copy/paste
    Sheets("B").Range("C32:C500").Copy Destination:=Worksheets("B").Range("A7")
End Sub
Tu as donc déjà la solution à ta question dans ton classeur
(Il suffit d'adapter)
 

Staple1600

XLDnaute Barbatruc
Re

Je te fournis le code de mon test
VB:
Sub AdvFilter_No_Dupes()
[G27].FormulaR1C1 = "=LEFT(RC[-4])=""#""": [G27].Font.Color = vbWhite
[C26:C143].AdvancedFilter Action:=2, CriteriaRange:=[G26:G27], CopyToRange:=[A3], Unique:=-1
End Sub
A toi de trouver les ajustements à faire (ceux évoqués dans le message#2) pour que ce code fonctionne correctement sur ton PC.
(Sur le mien, c'est OK ;))
 

Ayari69700

XLDnaute Nouveau
Bonjour merci pour beaucoup pour votre aide, j'ai 2 soucis :

- Je n'arrive pas adapter le dernier code j'ai une erreur 1004 nom de champ incorrect
- Vous pensez qu'il est possible d'avoir une plage flexible et pas figée pour le copier et pour le coller ??

Merci encore
 

Staple1600

XLDnaute Barbatruc
Re

Ci-dessous résultat de mon test
01FiltreEL.jpg
 

Ayari69700

XLDnaute Nouveau
Merci beaucoup ca marche nikel pour être sur de bien comprendre j'ai commenté ce que je comprends (le peu que je comprends) :

[G27].FormulaR1C1 = "=LEFT(RC[-4])=""#""": [G27].Font.Color = vbWhite
' filtre les doublon commencant par # et les met provisoirement sur G27 ?

[C26:C143].AdvancedFilter Action:=2, CriteriaRange:=[G26:G27], CopyToRange:=[A3], Unique:=-1
End Sub '


Est il possible d'utiliser la fonction :

"d = Range(f.[D100], f.[d65000].End(xlUp)).Value" pour avoir une colonne adaptable ?
 

Staple1600

XLDnaute Barbatruc
Re

Alors voici les commentaires que j'aurai pu mettre ;)
VB:
Sub AdvFilter_No_Dupes()
'insère le critère du filtre (critère par formule)
[G27].FormulaR1C1 = "=LEFT(RC[-4])=""#"""
'passe la couleur de police de G7 en blanc
'pour ne pas voir la formule à l'affichage
[G27].Font.Color = vbWhite
'applique le filtre élaboré avec ces paramètres
'Copier vers A3 / Extraction sans doublons OUI[x]
[C26:C143].AdvancedFilter Action:=2, CriteriaRange:=[G26:G27], CopyToRange:=[A3], Unique:=-1
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Ayari69700

Prends le temps d'étudier ce petit exemple.
A tester sur une feuille vierge d'un nouveau classeur.
1) Tu lances une fois la macro CREATION_EXEMPLE
En jaune les doublons
2) Tu lances ensuite la macro Filtre_Avancé
Pour comprendre le fonctionnement, voir la formule en R6
VB:
Sub CREATION_EXEMPLE() ' A NE LANCER QU'UNE FOIS - Ne sert qu'à créer des données pour le test
Dim t, r As Range: t = [{"Calque","SDO" ,"LPN" ,"CFC", "CI" , "Câble/Tube"}]: [A5:F5] = t: [K5:P5] = t
Set r = [K6:K30]: r = "=CHAR(35)&""-""&REPT(CHAR(59+ROW()),3)&TEXT(ROW()-5,"" 000"")"
[L6:P30] = "=ADDRESS(ROW(),COLUMN(),4)": [K5].CurrentRegion = [K5].CurrentRegion.Value
[K10:K11].FillDown: [K14:K16].FillDown: [K21:K24].FillDown
r.FormatConditions.AddUniqueValues: r.FormatConditions(1).DupeUnique = 1
r.FormatConditions(1).Font.Color = vbRed: r.FormatConditions(1).Interior.Color = vbYellow: r.FormatConditions(1).Font.Bold = -1
[K5].CurrentRegion.Borders.Weight = 2
End Sub
Sub Filtre_Avancé()
[R6] = "=LEFT(K6)=""#""" 'c'est cette formule qui sert de critère pour le filtre
'le critère est donc: le 1er caractère des cellules en colonne K est égal à #
[R6].Font.Color = vbWhite ' mise en blanc de la police en R6 (pour ne pas voir la formule): c'est juste esthétique
'application du Filtre Avancé avec Recopie en colonne A (à partir de A5) et sans doublons
[K5:K30].AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("R5:R6"), CopyToRange:=Range("A5"), Unique:=True
End Sub
Est-ce que c'est désormais plus clair?
Et vois-tu désormais comment adapter cela sur ton vrai classeur?
 

Staple1600

XLDnaute Barbatruc
Re

La question avant l'adaptation est:
As-tu compris le fonctionnement de mon exemple?
1) Comment je filtre les données?
2) Avec quel critère?
Quels sont les plages de cellules etc...?

NB: Dans ton fichier joint (celui du message#10), aucune cellule ne commençait par un #

Fais ce test sur ce fichier (ou de nouveau sur un fichier vierge)
VB:
Sub Test_VERIF()
Dim Verif As Boolean
test = Array(1, "Ligne", "Eléments de détail", "4.1931")
[B100:E100] = test
[G100].FormulaR1C1 = "=LEFT(RC[-3])=""#"""
Verif = Evaluate("=LEFT(D100)=""#""")
MsgBox "Contenu de D100:" & vbCrLf & [D100].Text, IIf(Verif, vbInformation, vbCritical), "Test " & Verif
[D100] = "#-Staple1600"
Verif = Evaluate("=LEFT(D100)=""#""")
MsgBox "Contenu de D100:" & vbCrLf & [D100].Text, IIf(Verif, vbInformation, vbCritical), "Test " & Verif
End Sub
 

Ayari69700

XLDnaute Nouveau
Bonjour,

Merci pour votre retour

Je comprends bien comment ça marche merci, mais il y a un détail qui m'échappe car il me met une erreur;

Ma plage de données sources est : [AS5:AS896] c'est cette plage (qui peut être d’ailleurs plus grande) dans laquelle je voulais supprimer les doubler garder que les cellule commençant pas "#" et les mettre en A5.

Je l'ai mis en évidence dans ce fichier
 

Pièces jointes

  • METRES AyY Macr - vba - Copie.xlsm
    166.6 KB · Affichages: 3

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Ayari69700

Ton fichier semble avoir des soucis.
(déjà tu as des références circulaires dans tes formules)
J'ai fais le test suivant
1) J'ai copié les données de [AS5:AS896] dans un nouveau classeur
(donc en A1:A893 avec en A1,la valeur: Calque)
Puis j'ai lancé cette macro
VB:
Sub Test_FiltreElaboré_SD()
Dim RNG As Range
Set RNG = Range("A1:A893"): [B2].Formula = "=LEFT(A2)=CHAR(35)": [B2].Font.Color = vbWhite
Application.ScreenUpdating = False
RNG.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("B1:B2"), CopyToRange:=Range("E1"), Unique:=True
[E1].CurrentRegion.Columns.AutoFit: [E1].CurrentRegion.Interior.Color = vbGreen
[B2].Formula = "=LEFT(A2)=""#"""
RNG.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("B1:B2"), CopyToRange:=Range("H1"), Unique:=True
[H1].CurrentRegion.Columns.AutoFit: [H1].CurrentRegion.Interior.Color = vbYellow
[B2].Formula = "=ISNUMBER(SEARCH(""#*"",A2))"
RNG.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("B1:B2"), CopyToRange:=Range("L1"), Unique:=True
[L1].CurrentRegion.Columns.AutoFit: [L1].CurrentRegion.Interior.Color = vbRed
End Sub
Et sur ce fichier test, tout se passe bien.

NB: J'ai testé avec trois formules différentes pour m'assurer que le filtre fonctionne bien.
Contrairement à ton fichier.
 

Discussions similaires

Réponses
9
Affichages
445

Statistiques des forums

Discussions
312 860
Messages
2 092 961
Membres
105 571
dernier inscrit
MAT30190