Bonjour,
sur une colonne excel de 1000 lignes environ des valeurs positifs et autres négatifs.
Mon objectif consiste à supprimer les valeurs identiques mais de signes différents, ex 500 et -500. Merci par avance pour votre aide
Bonjour,
sur une colonne excel de 1000 lignes environ des valeurs positifs et autres négatifs.
Mon objectif consiste à supprimer les valeurs identiques mais de signes différents, ex 500 et -500. Merci par avance pour votre aide
En supposant que tes valeur sont en A1:A1000, tu mets en B1 la formule :
Tu copies B1 en B1:B1000
Code : Sélectionner tout - Visualiser dans une fenêtre à part =ABS(A1)
Tu sélectionnes A1:B1000 > Ruban Données > Icone Supprimer les doublons > Tu ne coches que la colonne B > Ok
Tu supprimes la colonne B.
Moins de 2 min montre en main.
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Merci pour ta réponse menhir
Si j'applique cette méthode je risque de supprimer les doublons dont le signe est le même.
Je voudrais supprimer les cellules dont la somme est égale à zéro.
1. 5
2. 10
3. -5
4. 5
Si j'utilise la méthode de ABS je risque de supprimer deux valeurs de même signe. C'est-à-dire la ligne 1,3 et 4. Cependant je veux supprimer la valeur 5 et -5 qui nous donne une somme égale à zéro.
Je vous remercie.
Même solution que celle de Menhir, mais au lieu detu mets en B1
Code : Sélectionner tout - Visualiser dans une fenêtre à part Abs(A1),
Code : Sélectionner tout - Visualiser dans une fenêtre à part =IF((A1)<0;-A1;A1)
Bonjour à tous,
Zekraoui_Jakani s'est contenté en quelque sorte de donner une définition de la valeur absolue; autant utiliser alors la fonction ABS mais Chalabifaresalger s'est aperçu que cela poserait
problème.
Une proposition dans le classeur joint. Je l'ai testée sur 1000 lignes mais illustrée dans l'image ci-dessous avec beaucoup moins de données.
On définit donc les noms :
plagebrute par :
intermediaire par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part =DECALER(Feuil1!$A$2;;;NB(Feuil1!$A:$A))
Ce nom crée en mémoire interne une matrice unicolonne d'autant de cellules que plagebrute, chaque cellule contenant le numéro de ligne lorsque la cellule correspondante de plagebrute ne peut plus être "éliminée" par une valeur opposée se trouvant dans plagebrute et non encore "utilisée". (J'ai peur de ne pas être très clair).
Code : Sélectionner tout - Visualiser dans une fenêtre à part =SI(NB.SI(DECALER(Feuil1!$A$2;;;LIGNE(plagebrute));plagebrute)>NB.SI(plagebrute;-(plagebrute));LIGNE(plagebrute);"")
Ecrire alors en B2 la formule :
et la recopier vers le bas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part =SI(LIGNE()-1<=NB(intermediaire);INDEX($A:$A;PETITE.VALEUR(intermediaire;LIGNE()-1));"")
Je dois reconnaître que la formule matricielle utilisée pour définir intermediaire risque d'initier l'utilisateur à la patience.Il vaut peut être mieux enlever le Calcul automatique
et demander Calculer maintenant à la fin.
Si l'on trouve le temps trop long, je peux renvoyer un classeur où cette plage intermédiaire sera écrite dans une colonne que l'on peut masquer ou non.
Cordialement
Claude
Merci papouclo sur votre intervention,
j'ai suivi toutes la méthode que vous m'avez proposé, et je pense j'ai fait une erreur quelque part dans les formules.
merci de me corriger,
Voici les résultats trouvés:
sur la case "plagebrute" = la valeur de la case correspondant (plagebrute= la valeur A2)
dans la case "intermédiaire" il me renvoie le numéro de la ligne.
et quand je tape la formule générale, il me donne une cellule vide.
Merci encore une fois.
Bonjour,
L’erreur vient du fait que les noms plagebrute et intermediaire ne sont pas définis de façon correcte.
De plus, dans la mesure où l'on a défini un tableau avec une colonne nommée Intermédiaire(qui peut éventuellement se masquer), ces deux noms sont devenus inutiles et il n'est plus besoin d'utiliser de formule matricielle.
Ecrire en B2 la formule :
et en C2 la formule :
Code : Sélectionner tout - Visualiser dans une fenêtre à part =SI(NB.SI($A$2:$A2;[@VALEURS])>NB.SI([VALEURS];-[@VALEURS]);LIGNE();"")
Cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part =SI(LIGNE()-1<=NB([Intermédiaire]);INDEX(Tableau1[[#Tout];[VALEURS]];PETITE.VALEUR([Intermédiaire];LIGNE()-1));"")
Claude
Bonsoir à tous,
Vois ceci :
klin89
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Option Explicit Sub test() Dim a, i As Long, x As Range, e With Sheets("Feuil1").Cells(1).CurrentRegion .EntireRow.Interior.ColorIndex = xlNone a = .Value With CreateObject("Scripting.Dictionary") For i = 2 To UBound(a, 1) If a(i, 1) > 0 Then .Item(i) = a(i, 1) End If Next For i = 2 To UBound(a, 1) If a(i, 1) < 0 Then For Each e In .keys If a(i, 1) + .Item(e) = 0 Then If x Is Nothing Then Set x = Union(Rows(i), Rows(e)) Else Set x = Union(x, Rows(e), Rows(i)) End If .Remove e: Exit For End If Next End If Next End With 'supprime 'If Not x Is Nothing Then x.EntireRow.Delete 'surligne If Not x Is Nothing Then x.Interior.ColorIndex = 44 End With End Sub
Bonjour Klin89,
pour rappel ici c'est le forum des formules de feuille de calculs et non celui dédié au VBA, merci …
_________________________________________________________________________________________________________Je suis Paris, Charlie, Bruxelles, …
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager