Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2012, 17h48   #1
Nouveau Membre du Club
 
Avatar de Paloma
 
Inscription : juin 2006
Messages : 186
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 186
Points : 37
Points : 37
Par défaut VRAI/FAUX à la recherche de la cellule perdue

Bonjour,

J'essais de faire un fichier Excel qui permettrai de vérifier des données qui sont identifiées par plusieurs personnes dans des tableaux différents. J'ai donc mis dans un même fichier Excel ces deux tableaux (feuilles). Leurs points commun sont :
- le nom de certaines colonnes
- et pour l’une d’entre elle, ses valeurs en colonne (des noms
d’applications) se retrouve d'un tableau à l'autre (Même casse,
même nommage .: c.a.d. on vérifie manuellement que l'on reste
aligné.

Donc dans sheet 1 j'ai

| A | B |
| Toto | ... |
| Toti | ... |
| Tota | ... |


Et dans sheet 2 j'ai

| A | B | C |
| Toto | ... | VRAI|
| Tuti | ... | FAUX|
| Tuta | ... | FAUX|

J'aimerai dans la colonne C indiquer par VRAI quand la valeur de la cellule A (1) (Toto) est trouvée dans sheet 1 colonne A sinon FAUT.

Au choix, soit par VBA dans woorksheet pour que le controle se lance en automatique
soit par formule excel.

Mais je n'y arrive pas.
J'ai essayé un mix entre find, if, vlookup etc... mais bon chuis pas doué

Merci d'avance et au plaisir de vous lire
__________________
Cordialement,
Paloma



Pensez au
Paloma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 18h00   #2
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Bonjour,

avec Excel
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 18h00   #3
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 924
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 924
Points : 7 254
Points : 7 254
Bonjour,

Essais comme cela
Code :
=SI(ESTERREUR(RECHERCHEV(A1;Feuil1!A:A;1;0));FAUX;VRAI)
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2012, 18h37   #4
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Et une version avec FIND pour compléter la série .
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Worksheet_Activate()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim DerLig2 As Long
Dim Valeur As Range, Cel As Range
 
    Set ws1 = Worksheets("Feuil1")
    Set ws2 = Worksheets("Feuil2")
 
    DerLig2 = ws2.Range("A" & ws2.Rows.Count).End(xlUp).Row
    For Each Cel In ws2.Range("A2:A" & DerLig2)
        Set Valeur = ws1.Range("A:A").Find(Cel, LookIn:=xlValues, LookAt:=xlWhole)
        If Not Valeur Is Nothing Then
            Cel.Offset(0, 2) = True
        Else
            Cel.Offset(0, 2) = False
        End If
    Next
 
    Set Valeur = Nothing
    Set ws1 = Nothing
    Set ws1 = Nothing
End Sub
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2012, 08h55   #5
Nouveau Membre du Club
 
Avatar de Paloma
 
Inscription : juin 2006
Messages : 186
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 186
Points : 37
Points : 37
Par défaut Ma formule

Bonjour,

Merci pour toutes ces réponses

En fait j'ai presque réussi.

Code :
=IF(VLOOKUP(G3,Sheet1!A1:B7,1,FALSE)=G3,"VRAI","FAUX")
Mais bon en auto ça serait simpa

Je regarde vos propositions et passe à résolue quand l'une me correspondra et que j'aurai su la faire fonctionner correctement.
Je crois que j'ai le choix maintenant.
Merci à vous.
__________________
Cordialement,
Paloma



Pensez au
Paloma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 10h59   #6
Nouveau Membre du Club
 
Avatar de Paloma
 
Inscription : juin 2006
Messages : 186
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 186
Points : 37
Points : 37
Re bonjour à tout le monde,

J'ai essayé de mettre en action le code VBA sur ma feuille 2;

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Worksheet_Activate()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim DerLig2 As Long
Dim Valeur As Range, Cel As Range
 
    Set ws1 = Worksheets("Applications Matrix")
    Set ws2 = Worksheets("MP.AC Extract")
 
    DerLig2 = ws2.Range("C" & ws2.Rows.Count).End(xlUp).Row
    For Each Cel In ws2.Range("B2:B" & DerLig2)
        Set Valeur = ws1.Range("B:B").Find(Cel, LookIn:=xlValues, LookAt:=xlWhole)
        If Not Valeur Is Nothing Then
            Cel.Offset(0, 0) = True
        Else
            Cel.Offset(0, 0) = False
        End If
    Next
 
    Set Valeur = Nothing
    Set ws1 = Nothing
    Set ws1 = Nothing
End Sub
J'ai dans ws2 en colonne B le résultat attendu (TRUE/FALSE) et en C le nom des applications listées.
Dans la ws2 j'ai en colonne B une autre liste d'applications.

Quand je bascule sur la sw2, le code s'exécute et j'ai TRUE à chaque ligne.
Quand je lance en mode debug, j'ai FALSE partout.

Si vous pouvez m'expliquer?
Je cherche mon erreur en tous les cas.

Boouuuu j'y arrive pas pour l'instant

Je mets un fichier pour exemple:
Fichiers attachés
Type de fichier : zip test.zip (12,2 Ko, 4 affichages)
__________________
Cordialement,
Paloma



Pensez au
Paloma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 11h04   #7
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Bonjour,

Citation:
J'ai dans ws2 en colonne B le résultat attendu (TRUE/FALSE) et en C le nom des applications listées.
Dans la ws2 j'ai en colonne B une autre liste d'applications.
Ce n’est pas cohérent.
Tu ne peux pas avoir dans ws2 en colonne B le résultat attendu (TRUE/FALSE) et en même temps dans ws2 en colonne B une autre liste d'applications.

Le code suivant balaye chaque cellule renseignée de la colonne B, feuille "MP.AC Extract".
Pour chaque cellule, il recherche une valeur égale dans la colonne B de la feuille "Applications Matrix".
S’il trouve la valeur, il inscrit VRAI dans la cellule adjacente (colonne C, feuille "MP.AC Extract").
Code :
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
Private Sub Worksheet_Activate()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim DerLig2 As Long
Dim Valeur As Range, Cel As Range
 
    Set ws1 = Worksheets("Applications Matrix")
    Set ws2 = Worksheets("MP.AC Extract")
    'Recherche de la dernière cellule renseignée dans la colonne B de la feuille "MP.AC Extract"
    DerLig2 = ws2.Range("B" & ws2.Rows.Count).End(xlUp).Row
    'Pour chaque cellule de la plage (colonne B de la feuille "MP.AC Extract")
    For Each Cel In ws2.Range("B2:B" & DerLig2)
        'Recherche une valeur équivalente dans la colonne B de la feuille "Applications Matrix"
        Set Valeur = ws1.Range("B:B").Find(Cel, LookIn:=xlValues, LookAt:=xlWhole)
        'Si la valeur existe, incrire TRUE sinon FALSE dans la cellule adjacente (colonne C)
        If Not Valeur Is Nothing Then
            Cel.Offset(0, 1) = True
        Else
            Cel.Offset(0, 1) = False
        End If
    Next
 
    Set Valeur = Nothing
    Set ws1 = Nothing
    Set ws1 = Nothing
End Sub
Si ce n'est pas ce que tu cherches à faire, donne-moi un complément d'explications .

Cordialement.

OK, j'ai vu ton fichier
Code :
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
Private Sub Worksheet_Activate()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim DerLig2 As Long
Dim Valeur As Range, Cel As Range
 
    Set ws1 = Worksheets("Applications Matrix")
    Set ws2 = Worksheets("MP.AC Extract")
    'Recherche de la dernière cellule renseignée dans la colonne C de la feuille "MP.AC Extract"
    DerLig2 = ws2.Range("C" & ws2.Rows.Count).End(xlUp).Row
    'Pour chaque cellule de la plage (colonne C de la feuille "MP.AC Extract")
    For Each Cel In ws2.Range("C2:C" & DerLig2)
        'Recherche une valeur équivalente dans la colonne B de la feuille "Applications Matrix"
        Set Valeur = ws1.Range("B:B").Find(Cel, LookIn:=xlValues, LookAt:=xlWhole)
        'Si la valeur existe, incrire TRUE sinon FALSE dans la cellule adjacente (colonne B, feuille "MP.AC Extract")
        If Not Valeur Is Nothing Then
            Cel.Offset(0, -1) = True
        Else
            Cel.Offset(0, -1) = False
        End If
    Next
 
    Set Valeur = Nothing
    Set ws1 = Nothing
    Set ws1 = Nothing
End Sub
EDIT : La procédure doit être placée dans le module de feuille MP.AC Extract.
Elle utilise l’événement Worksheet_Activate qui se produit lorsque la feuille est activée.
Si tu souhaites que la procédure soit réalisée à l’ouverture du classeur, utilises l’événement Workbook_Open du module ThisWorkbook.


Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2012, 11h42   #8
Nouveau Membre du Club
 
Avatar de Paloma
 
Inscription : juin 2006
Messages : 186
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 186
Points : 37
Points : 37
Super merci gFZT82
je regarde ça.
Oui je me suis raté.
Avec vos explications c'est bien plus facile pour moi

Je teste de mon coté et valide cet aprem.
Merci Merci Merci
__________________
Cordialement,
Paloma



Pensez au
Paloma est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h47.


 
 
 
 
Partenaires

Hébergement Web