Selection de valeur >0 dans une colonne

Résolu
Vinzfloz1 Messages postés 21 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 3 avril 2007 - 3 janv. 2007 à 09:09
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 7 janv. 2007 à 00:20
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

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 janv. 2007 à 09:21
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
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
3 janv. 2007 à 12:03
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
3
Vinzfloz1 Messages postés 21 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 3 avril 2007
3 janv. 2007 à 09:34
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.


 


 
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 janv. 2007 à 09:58
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Vinzfloz1 Messages postés 21 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 3 avril 2007
3 janv. 2007 à 10:11
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 janv. 2007 à 10:14
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
0
Vinzfloz1 Messages postés 21 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 3 avril 2007
3 janv. 2007 à 10:41
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.


 
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 janv. 2007 à 10:51
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
0
Vinzfloz1 Messages postés 21 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 3 avril 2007
3 janv. 2007 à 11:03
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 ?

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

MPi
0
Vinzfloz1 Messages postés 21 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 3 avril 2007
3 janv. 2007 à 13:41
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
0
Vinzfloz1 Messages postés 21 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 3 avril 2007
3 janv. 2007 à 13:43
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é.
0
Vinzfloz1 Messages postés 21 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 3 avril 2007
3 janv. 2007 à 13:54
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
0
Vinzfloz1 Messages postés 21 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 3 avril 2007
3 janv. 2007 à 14:29
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
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
7 janv. 2007 à 00:20
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
0
Rejoignez-nous