Savoir si le contenu d'une cellule est strictement supérieur à une autre

Bonjour, j'ai un petit soucis dans mon code.

Dans ma feuille de calcul j'ai plusieurs colonnes, dont une contenant des valeurs de diamètres (200, 150 ...). J'aimerai pouvoir parcourir cette colonne ("E") avec un macro afin de pouvoir déterminer tous les diamètres existants et les mettre dans un tableau. Seulement j'aimerai que dans ce tableau il ne mette la valeur qu'une fois !

Donc j'ai écrit un bout de code qui parcourt la colonne ligne par ligne, et lorsque la valeur de la cellule est déjà présente dans le tableau il passe aussitôt à la ligne suivante.

Cependant, il me copie toutes les valeurs ... Meme si elle sont déjà présentes ...

Sub Caracteristique_reseau()

Dim FL1 As Worksheet, Cell As Range
Dim NoLig As Long, DerLig As Long

Dim n As Single
Dim m As Single

n = 21
m = 11
NoLig = 4

    'Instance de la feuille qui permet d'utiliser FL1 partout dans
    'le code à la place du nom de la feuille
    Set FL1 = ActiveSheet

 FL1.Range("K10:NN10").ClearContents ' efface les diamètres

FL1.Cells(10, m) = FL1.Cells(4, "E")

While FL1.Cells(NoLig, "D") <> ""
    'si le réseau est gravitaire
        If FL1.Cells(NoLig, "F") = "Gravitaire" Then
'# Diamètre du réseau gravitaire #
            If FL1.Cells(10, m) > FL1.Cells(NoLig, "E") 
                FL1.Cells(10, m) = FL1.Cells(NoLig, "E").Value
                m = m + 1
            Else
                m = m + 1
            End If
        End If
Wend

    Set FL1 = Nothing

End Sub

Je pense que c'est un souci de > mais je n'en suis pas sûre ! des idées?

Merci d'avance !

Bonjour Prob,

Une copie de ton fichier serait plus parlant que le code.

A dispo

Bonjour,

une solution consisterait à utiliser un dictionnaire (dictionary) "sorte de tableau (array)" qui a la particularité de ne conserver qu'une seule valeur en cas de valeurs identiques.

Par contre pour réaliser la macro il faudrait plus d'informations sur l'agencement des données , parce que je ne vois pas comment fonctionne le code (avec While FL1.Cells(NoLig, "D") <> "" , NoLig n'est jamais modifié on a alors une boucle qui ne démarre pas ou qui tourne sans fin)

A+

Bonjour,

voici mon fichier.

Le problème se trouve dans le deuxième while du code.

En fait j'aimerai si possible obtenir dans la ligne bleu sous "Diamètre (mm) Tout les diamètres qui se trouve dans la colonne . et faire en sorte qu'ils soient classés du plus petit au plus grand. Est ce que c'est possible ?

Clairement je sais que la partie :

If FL1.Cells(10, m) > FL1.Cells(NoLig, "E") And FL1.Cells(NoLig, "E") <> FL1.Cells(10, m) Then
                FL1.Cells(10, m) = FL1.Cells(NoLig, "E").Value
                m = m + 1

ne marche pas dans ce cas.

Merci d'avance!

2classeur1.xlsm (38.13 Ko)

Re-

j'aimerai si possible obtenir dans la ligne bleu sous "Diamètre (mm) Tout les diamètres qui se trouve dans la colonne

C'est une colonne part Diamètre du coup non ? Vue l'agencement de ton tableau "Diamètre (mm)"

capture

Et sans aucun doublon ? C'est à dire, une seule fois le "200" ?

Re

Oui c'est tout a fait ça !

Avec uniquement les diamètres présents dans la colonne D

Re-

La colonne D ? Elle correspond au Matériau

capture

Ah non je dis des bêtises ! La colonne E pardon !

Désolé

Re-

Désolé pour le temps.

Ci-joint ton fichier modifié ! La macro est plutôt complète

A dispo!

2pour-prob.xlsm (47.92 Ko)

Merci beaucoup ! Etant plus que débutante je ne pouvais pas du tout réussir à réaliser cela !

D'ailleurs je ne comprends pas tout ! Je vais devoir me pencher dessus !!

Bonne soirée !

Finalement je ne comprends pas tout .... Le code marche parfaitement sur votre fichier, mais quand je le copie dans mon classeur, le code fait la mise en forme (cellule bleu + contour noir) pour toute la suite de la ligne... jusqu'à la dernière colonne ... et je ne comprends pas ce qui change entre votre classeur et le mien ....

Re-

et je ne comprends pas ce qui change entre votre classeur et le mien ....

Pour pouvoir apporter une réponse claire et précise j'aurai besoin de voir ce nouveau classeur, mais au vue du code que j'ai mis en place, ce doit être la disposition du tableau qui a changé

Est-ce qu'il se trouve à la position exacte du tableau que tu nous as partagé ?

Si ce n'est pas le cas, alors les références aux lignes et aux colonnes sont à changer dans le code

Une petite astuce : Place toi sur le code, et appuie sur la touche F8 du clavier

Le code va s’exécuter au pas à pas

C'est-à-dire qu'il va exécuter la ligne de code qui serra surligné en jaune (F8 pour passer à la ligne suivante)

C'est plutôt pas mal quand on veux voir ce qui déconne dans un code où il n'y a pas de message d'erreur

Re

Je n'ai pas le fichier sous les yeux, mais j'avais vérifié que les cellules du codes correspondaient à la feuille. Et il n'y a pas de soucis. J'avais également vérifié chaque étape du code "pas à pas".

En fait les cases se remplissent de la même manière au niveau du contenu. C'est à dire que les diamètres se remplissent parfaitement. C'est uniquement la mise en forme qui ne s'arrête pas à la dernière colonne du tableau mais qui continu jusqu'à la dernière colonne de la feuille. Je vous enverrai une copie écran demain matin.

Honnêtement j'ai réussi à comprendre le code en le décortiquant, mais je ne comprend pas pourquoi est ce qu'il ne réagit pas de la même manière sur les deux classeurs... Peut être que c'est à cause de la version d'excel ? J'utilise Excel 2010.

Bonjour! Je viens de trouver le problème ! En fait il y avait des cellules remplies a partir de la colonne QI. Après avoir enlevé ces valeurs, Il n'y a plus de problèmes !

Merci beaucoup !

Désolée de vous déranger encore une fois, mais si jamais je voulais mettre une condition de plus au code. C'est à dire :

si dans la colonne F c'est "Gravitaire" on exécute exactement le même code, mais si c'est autre chose comme "refoulement" par exemple on ne prend pas en compte le diamètre et on passe a la ligne suivante.

Où est ce que dans le code je doit rajouter cette condition ? Parce que j'ai essayé de nombreuses fois, et soit ça me mets des erreurs, soit ça ne prend pas en compte ma condition ...

Merci

Re-

Désolée de vous déranger encore une fois

Non non, aucun soucis

Rajoute la ligne de code ci-dessous juste après la ligne For Each c in p :

For Each c In p
    If Cells(c.Row, 6) <> "Gravitaire" Then GoTo NextIT

A dispo

Nickel merci ! je n'étais pas très loin de la réponse! Je commence à m'améliorer doucement !

Bonne journée

Rechercher des sujets similaires à "savoir contenu strictement superieur"