Selection de valeur >0 dans une colonne [Résolu]

Signaler
Messages postés
21
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
3 avril 2007
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour à tous,

Je fais appel à l'aide des habitués du forum pour me débloquer ma situation :)

J'ai un souci avec une partie de mon code. Dans cette partie je souhaite
- Prendre chaque valeur d'une colonne défini, chercher cette valeur dans une autre feuille Excel du même fichier.
- Puis à partir de la cellule trouvé dans cette autre feuille, je souhaite mettre sur fond rouge toutes les cellules dont la valeur est > à 0 dans la colonne où se trouve la valeur cherchée.

Voici mon code :

Dim Plage As Object
Set Plage = Sheets("Reporting").Range("H22").End(xlDown)


Dim C As Variant
Set C = ActiveCell




For Each cel In Plage
 Sheets("Product-Licensor View").Select
 Cells.Find(cel, LookIn:=xlValues).EntireColumn.Select
      
    For Each C In ActiveCell.EntireColumn
        If IsNull(C) = False Then
        C.Interior.ColorIndex = 3
        End If
    Next C
 Next cel

Le résultat : 1 seule colonne n'est sélectionnée,(alors que dans "Plage", il y a plusieurs cellules, et cette colonne est entièrement colorée en rouge, alors que je ne voulais ca seulement pour les cellules ayant une valeur > 0.

Voila. Je vous remercie par avance pour votre aide.

Vinzfloz1

15 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
57
Salut,

Et si tuessayais de remplacer ton test présent par,

For Each C In Selection 
    If C.Value > 0 Then C.Interior.ColorIndex = 3 
Next C 

NOTE: Si on sait de quel type sont C et Plage, pourquoi les définir en Variant? ou en Object?
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Pour simplifier, disons que tu sélectionnes manuellement la plage de données que tu veux vérifier

Dim Recherche as range, Cellule as range

For each Cellule in Selection
    Set Recherche = sheets("Product-Licensor View").Find(cellule.Text)
    If Not Recherche is nothing then 'Trouvé
       'Vérification des cellules > 0 avec sheets("Product-Licensor View").Range(Recherche.Address).Offset(0, X)
    End If
Next

MPi
Messages postés
21
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
3 avril 2007

Salut Julien,


Je te remercie. Je me suis compiqué la vie. Ton code sélectionne bien les cellules ayant une valeur > 0.


Cependant il me reste un petit souci. Je voudrais que le code face cette démarche pour chaque cellule de la première "Plage".


Alors que dans le cas présent, il n'effectue le code seulement pour la dernière cellule de "Plage".


Merci Julien, déjà ca me permet d'avancer, donc super.


 


 
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
57
Re,
Essaies ceci.
    Dim C As Range 
    Dim Cel As Range 

    For Each Cel In Sheets("Reporting").Range("H22").EntireColumn 
        ActiveWorkbook.Worksheets("Product-Licensor View").Cells.Find(Cel.Text, LookIn:=xlValues).EntireColumn.Select 
        For Each C In Selection 
            If C.Value > 0 Then C.Interior.ColorIndex = 3 
        Next C 
     Next Cel 

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
21
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
3 avril 2007

Sur la ligne
 ActiveWorkbook.Worksheets("Product-Licensor View").Cells.Find(Cel.Text, LookIn:=xlValues).EntireColumn.Select 

Le message suivant apparaît : "la méthode Select de la Classe Range a échoué".

Merci pour ton aide Julien
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
57
Salut,

Je crois que ce message apparait si la valeur cherche n'existe pas dans la feuille "Product-Licensor View"  Non?

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
21
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
3 avril 2007

Salut,


Le fait qu'il existe ou pas la valeur ne change rien. A moins que le fait que la 1ere recherche commençant à H22.EntireColumn, check aussi les cellules vides, ce qui provoque le message (juste une supposition..)


J'ai modifié ton code :


Dim C As Range
Dim Cel As Range


    For Each Cel In Sheets("Reporting").Range("H22").EntireColumn
        ActiveWorkbook.Worksheets("Product-Licensor View").Activate
        Cells.Find(Cel.Text, LookIn:=xlValues).EntireColumn.Select
        For Each C In Selection
            If C.Value > 0 Then C.Interior.ColorIndex = 3
        Next C
     Next Cel

Avec ce code, peut importe la valeur située en H22 et suivant, seule 1 colonne dans la 2ème feuille est sélectionnée en rouge. :)

Merci encore.


 
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
57
RE,
Lorsque tu dis
"Avec ce code, peut importe la valeur située en H22 et suivant, seule 1 colonne dans la 2ème feuille est sélectionnée en rouge"

Est ce que cela veut dire que ton problème est résolu?.
ou est ce que cela veut dire que tu souhaite sélectionné plus d'une colonnes?
Car actuellement vu que tu ne boucle pas sur le Find, c'est normal qu'il n'y est qu'une colonne de selectionné (et encore si la valeur est trouvée.).

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
21
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
3 avril 2007

RE,


En H22 et suivant H23,H24..... je peux avoir des Noms qui s'affichent.


Suivant différents critères, cette Plage de données change.


J'aimerai que l'application cherche la valeur de H22 dans la 2ème feuille, puis sélectionne les valeurs > 0 dans la colonne liée à la valeur trouvée.


Ensuite je veux la même chose pour les autres cellules (H23,  H24, jusqu'à la dernière non vide de H)


Je pensais que la boucle sur le Find se faisait automatiquement car Find est incrit dans la boucle For Each... Find... Next


Mais visiblement ca ne colle pas.


Comment structurer la boucle sur le Find ?

++
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Oups, j'ai oublié
Set Recherche = sheets("Product-Licensor View").Columns("A:A").Find(cellule.Text)

MPi
Messages postés
21
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
3 avril 2007

Merci MPi cela complète en partie les codes de Julien. On avance

Mais j'ai quelques difficultés à mettre tout ça en place.

Résultat : Dans ma 2ème feuille, les cellules recherchées sont bien sélectionnées et en rouge. Donc on avance puisqu'avant seule la dernière occurence était séléctionnée.

Je souhaiterai que toutes les cellules de la colonne ou se situe la Valeur trouvée soient soumis au test > 0.

Je pense que le problème se trouve dans ma 2ème boucle.

Voici le code :

Dim Recherche As Range, Cellule As Range, C As Range


Sheets("Reporting").Range("H22:H30").Select
For Each Cellule In Selection
    Set Recherche = Sheets("Product-Licensor View").Cells.Find(Cellule.Text)
    If Not Recherche Is Nothing Then 'Trouvé
        For Each C In Sheets("Product-Licensor View").Range(Recherche.Address).Offset(X, X)
        If C.Value > 0 Then C.Interior.ColorIndex = 3
        Next C
'Vérification des cellules > 0 avec sheets("Product-Licensor View").Range(Recherche.Address).Offset(0, X)
    End If
Next

Merci à tous les deux pour votre aide
Messages postés
21
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
3 avril 2007

Oubli : J'ai bien inscrit Offset(0,X) et non pasa (X,X).

Mais je pense que la solution à mon problème doit se trouver dans cette propriété.
Messages postés
21
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
3 avril 2007

Ca y est, ca fonctionne presque correctement.


Il reste quelques bugs, par ex :
- Après plusieurs lancement de l'application, il me sélectionne à la fois les valeurs de la précédentes recherches et celles de la nouvelle.
Je pense que je dois Unloader quelquechose ou utiliser Clearcontents.

En tout cas, merci à tous les deux pour votre aide, rapide, clairs et complémentaires.

Vinzfloz1
Messages postés
21
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
3 avril 2007

Rebesoin de votre aide

Comme je l'ai indiqué dans mon dernier message, il y a un bug.


Je  ne comprends pas pourquoi. Dans la 2ème feuille, là où l'application recherche les valeurs définis dans la 1ere, il m'effectue la recherche pour une valeur qui n'existe pas dans ma 1ere feuille.


Ex: il doit rechercher : Toto, Tata, Titi,


Et il me fait en plus de ces trois Tutu. Et ceci peu importe les cellules de la première feuille.


Si vous pouviez une fois de plus m'aider ce serait cool.


Je remets mon code actuel :


Dim Recherche As Range, Cellule As Range, C As Range


Sheets("Reporting").Range("H22:H30").Select
For Each Cellule In Selection
    Set Recherche = Sheets("Product-Licensor View").Cells.Find(Cellule, LookIn:=xlValues).EntireColumn
       
    If Not Recherche Is Nothing Then 'Trouvé
        For Each C In Sheets("Product-Licensor View").Range(Recherche.Address).Offset(0, 0)        If C.Value > 0 And C.Font.Bold True Then C.Interior.ColorIndex 3
        Next C
'Vérification des cellules > 0 avec sheets("Product-Licensor View").Range(Recherche.Address).Offset(0, X)
    End If
Next Cellule


Je vous remercie
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
For Each C In Sheets("Product-Licensor View").Range(Recherche.Address).Offset(0, 0)

à changer pour
Ligne = range(Recherche.Address).row
For Each C In Sheets("Product-Licensor View").Rows(Ligne)

et tu pourrais tester la colonne où la macro est rendue.
Si tu ne veux pas aller plus loin que la 20eme colonne
If C.Column > 20 then exit for

et ça devrait fonctionner, en principe

MPi