[VBA] Ressortir les données une seule fois.
Résolu
Erdnax
Messages postés
2273
Date d'inscription
Statut
Contributeur
Dernière intervention
-
tompols Messages postés 1273 Date d'inscription Statut Contributeur Dernière intervention -
tompols Messages postés 1273 Date d'inscription Statut Contributeur Dernière intervention -
A voir également:
- [VBA] Ressortir les données une seule fois.
- Fuite données maif - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Supprimer les données de navigation - Guide
- Trier des données excel - Guide
- Mettre une seule page en paysage word - Guide
13 réponses
Salut,
Tu peux faire ça avec un filtre élaboré (extraction sans doublons):
Range("A1:A4670").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns("G:G"), Unique:=True
A+
Tu peux faire ça avec un filtre élaboré (extraction sans doublons):
Range("A1:A4670").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns("G:G"), Unique:=True
A+
Salut,
Merci pour ça ça marche. Vu que t'as l'air de métriser l'outil, j'aurais encore une question.
Comment on pourrait faire en sorte qu'une fois les données triées elles soient copiées dans une autre feuille, mais avec deux lignes entres chacunes d'elles ?
J'ai beau chercher un moyen, mais j'ai quand même pas mal de problèmes...
Merci @+
Merci pour ça ça marche. Vu que t'as l'air de métriser l'outil, j'aurais encore une question.
Comment on pourrait faire en sorte qu'une fois les données triées elles soient copiées dans une autre feuille, mais avec deux lignes entres chacunes d'elles ?
J'ai beau chercher un moyen, mais j'ai quand même pas mal de problèmes...
Merci @+
Salut,
tu peux essayer ça :
Sub test()
Dim laligne As Integer
Dim i As Integer
laligne = Range("a65536").End(xlUp).Row
For i = laligne To 2 Step -1
If Not IsEmpty(Range("a" & i)) Then Rows(i).Select
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
Next i
End Sub
Cette macro insere 2 lignes si la cellule en A est non vide (à adapter selon ton cas.....
Doit y avoir moyen de faire mieux mais ça fonctionne......
A+
Tom
tu peux essayer ça :
Sub test()
Dim laligne As Integer
Dim i As Integer
laligne = Range("a65536").End(xlUp).Row
For i = laligne To 2 Step -1
If Not IsEmpty(Range("a" & i)) Then Rows(i).Select
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
Next i
End Sub
Cette macro insere 2 lignes si la cellule en A est non vide (à adapter selon ton cas.....
Doit y avoir moyen de faire mieux mais ça fonctionne......
A+
Tom
Salut, et merci.
J'ai le code suivant :
Est-ce qu'il est possible de le vérifer pour faire en sorte d'insérer les lignes vides au milieu ?
@+
J'ai le code suivant :
Sheets("Base").Range("M2:M65000").AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=Range("B2:B65000"), Unique:=True
Est-ce qu'il est possible de le vérifer pour faire en sorte d'insérer les lignes vides au milieu ?
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
adapté à ton cas :
Sub test()
Dim laligne As Integer
Dim i As Integer
laligne = Range("b65536").End(xlUp).Row
For i = laligne To 3 Step -1
If Not IsEmpty(Range("a" & i)) Then Rows(i).Select
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
Next i
End Sub
Ca doit fonctionner, tiens moi au courant...
A+
adapté à ton cas :
Sub test()
Dim laligne As Integer
Dim i As Integer
laligne = Range("b65536").End(xlUp).Row
For i = laligne To 3 Step -1
If Not IsEmpty(Range("a" & i)) Then Rows(i).Select
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
Next i
End Sub
Ca doit fonctionner, tiens moi au courant...
A+
Re,
Alors ça marche et ça marche pas. En fait, ça marche dans une feuille, mais pas dans l'autre, et je comprends pas pourquoi. Dans celle où ça marche pas, ça ne me met pas de message d'erreur, mais c'est juste que je n'ai pas le résultat que je veux...
J'aurais juste un question, est-ce que tu pourrais m'expliquer comment fonctionne le Selection.Insert Shift:=xlDown, et comme ça je pourrais peut-être voir moi même comment je pourrais faire...
Merci @+
Alors ça marche et ça marche pas. En fait, ça marche dans une feuille, mais pas dans l'autre, et je comprends pas pourquoi. Dans celle où ça marche pas, ça ne me met pas de message d'erreur, mais c'est juste que je n'ai pas le résultat que je veux...
J'aurais juste un question, est-ce que tu pourrais m'expliquer comment fonctionne le Selection.Insert Shift:=xlDown, et comme ça je pourrais peut-être voir moi même comment je pourrais faire...
Merci @+
Re,
Extrait de l'aide:
Méthode Insert telle qu'elle s'applique à l'objet Range.
Cette méthode insère une cellule ou une plage de cellules dans la feuille de calcul ou la feuille de macro et déplace les autres cellules pour augmenter l'espace disponible.
expression.Insert(Shift, CopyOrigin)
expression Obligatoire. Expression qui renvoie un objet Range.
Shift Argument de type Variant facultatif. Indique dans quel sens les cellules doivent être déplacées. Il peut s'agir de l'une des constantes XlInsertShiftDirection suivantes : xlShiftToRight ou xlShiftDown. Si vous ne spécifiez pas cet argument, Microsoft Excel agit en fonction de la forme de la plage.
CopyOrigin Argument de type Variant facultatif. Origine de la copie.
Et voilà...Tu peux préciser ce qui se passe (ou pas) sur l'autre feuille ?
A+
Extrait de l'aide:
Méthode Insert telle qu'elle s'applique à l'objet Range.
Cette méthode insère une cellule ou une plage de cellules dans la feuille de calcul ou la feuille de macro et déplace les autres cellules pour augmenter l'espace disponible.
expression.Insert(Shift, CopyOrigin)
expression Obligatoire. Expression qui renvoie un objet Range.
Shift Argument de type Variant facultatif. Indique dans quel sens les cellules doivent être déplacées. Il peut s'agir de l'une des constantes XlInsertShiftDirection suivantes : xlShiftToRight ou xlShiftDown. Si vous ne spécifiez pas cet argument, Microsoft Excel agit en fonction de la forme de la plage.
CopyOrigin Argument de type Variant facultatif. Origine de la copie.
Et voilà...Tu peux préciser ce qui se passe (ou pas) sur l'autre feuille ?
A+
Argl,
alors en fait, ca me met 124 lignes avant de me recoller mes 64 enregistrements uniques, mais je ne sais pas si ça peut venir de ça, mais parce que j'ai déjà fait une macro de mise en forme, mais qui elle ne travail en rien l'espace. J'ai donc essayé de l'insérer dans ma macro de mise en forme, et juste avant tout, comme ça ça met les espaces, et après c'est tout prêt à être traité...
T'as compris ^^ ?
alors en fait, ca me met 124 lignes avant de me recoller mes 64 enregistrements uniques, mais je ne sais pas si ça peut venir de ça, mais parce que j'ai déjà fait une macro de mise en forme, mais qui elle ne travail en rien l'espace. J'ai donc essayé de l'insérer dans ma macro de mise en forme, et juste avant tout, comme ça ça met les espaces, et après c'est tout prêt à être traité...
T'as compris ^^ ?
Presque ;-).....
Peux-tu stp coller le code,comme ça je comprendrai mieux où tu veux en venir... ?
A+
Peux-tu stp coller le code,comme ça je comprendrai mieux où tu veux en venir... ?
A+
Voila alors
Je sais, c'est un peu "buche" comme code, mais ça marche, et je suis un peu débutant lol... (on peut noter la dernière ligne qui permet d'aller directement au résultat suivant, pour autant qu'il se trouve plus bas, d'ou mon code du début...)
:D
Sub mise_en_forme() 'ton code ' Dim laligne As Integer Dim i As Integer laligne = Range("b65536").End(xlUp).Row For i = laligne To 3 Step -1 If Not IsEmpty(Range("a" & i)) Then Rows(i).Select Selection.Insert Shift:=xlDown Selection.Insert Shift:=xlDown Next i ' 'et la dessous tout mon code de mise en forme ' Range("B2").Select While ActiveCell.Value <> "" ActiveCell.Offset(0, 0).Range("A1:A2").Merge ActiveCell.Offset(0, 0).Range("A1:A2").Select With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Selection.Borders(xlInsideHorizontal).LineStyle = xlNone ActiveCell.Offset(0, 1).Select With ActiveCell .Value = "in" With .Borders .LineStyle = xlContinuous End With With .Interior .Color = RGB(255, 255, 102) End With End With ActiveCell.Offset(1, 0).Select With ActiveCell .Value = "out" With .Borders .LineStyle = xlContinuous End With With .Interior .Color = RGB(255, 255, 102) End With End With ActiveCell.Offset(-1, 1).Range("A1:I2").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone ActiveCell.Offset(0, 9).Range("A1:A2").Select With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Selection.Borders(xlInsideHorizontal).LineStyle = xlNone With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ActiveCell.FormulaR1C1 = "=SUM(RC[-9]:RC[-1])" ActiveCell.Offset(1, 0).Select ActiveCell.FormulaR1C1 = "=SUM(RC[-9]:RC[-1])" ActiveCell.Offset(2, -11).Select Wend End Sub
Je sais, c'est un peu "buche" comme code, mais ça marche, et je suis un peu débutant lol... (on peut noter la dernière ligne qui permet d'aller directement au résultat suivant, pour autant qu'il se trouve plus bas, d'ou mon code du début...)
:D