Comparer une cellule dans plusieurs onglet

BACON -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je réalise un outil de gestion de personnel, j'ai un code qui marche mais je voudrais l'améliorer.

Le classeur comporte 9 onglets identiques et titrés avec les noms des différents chantiers en cours. Un onglet synthèse vérifie qu'une personne ne pointe deux fois au même endroit au même moment. Si c'est le cas une formule affiche Erreur dans un onglet synthèse.

la macro ( un peu simpliste ) que j'ai permet d'afficher un message d'erreur dès la saisie d'une coquille n'importe où dans le tableau. Ce que je souhaite c'est pouvoir récupérer la position de la cellule qui est déjà affecté et afficher dans mon message ou aller la cherché.
Je me perds avec les conditions du If quand j'essaie de récupérer l'adresse de la cellule

Sub error()
    
  For Each cellule In Sheets("Synthèse").Range("C4:OX116")
    If cellule = "Erreur" Then   
        MsgBox ("la personne est déjà affecté")    
    End If
  Next
   
End Sub



4 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Bonjour,

Comme ceci

 MsgBox cellule.Address

1
BACON
 
Merci :)
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Je pense comprendre que tu aimerai récupérer les coordonnées de la cellule que tu es en train de "modifier" ?
En gros.. tu écris une valeur.. et hop ça déclenche ta macro ?
Dans ce cas tu dois regarder les event worksheet_change
Private Sub Worksheet_Change(ByVal Target as Range) 
    MsgBox Target.address
End Sub


Si tu veux effectuer une RECHERCHE dans ton classeur pour trouver où se trouve une valeur.. tu peux utiliser la méthode FIND
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel
1
BACON
 
Bonjour Jordan45,

Merci pour la réponse hyper rapide :)

Alors je ne connaissais pas la fonction adress merci.

L'idée est un peu plus complexe, j'aimerais que la macro vérifie dans chaque onglet si il y a quelque chose dans la meme cellule que la synthèse. On a l'adresse d'une cellule dans un onglet, on aimerai savoir qu'est ce qu'il y a la même adresse mais dans un autre onglet. et afficher dans le message d'erreur le nom de l'onglet.

J'ai utilisé la sub worksheet_Change top !! Merci.
0
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonjour Bacon, bonjour le forum,

Pas sûr d'avoir bien compris... Peut-être comme ça :
Sub error()
    
  For Each cellule In Sheets("Synthèse").Range("C4:OX116")
    If cellule = "Erreur" Then   
        MsgBox "La personne est déjà affectée dans la cellule " & celulle.address(0, 0) & "."
    End If
  Next
   
End Sub



1
BACON
 
Bonjour Jordan45 et ThauTheme,

Merci pour vos réponses :)

Alors je ne connaissais pas la fonction adress merci.

L'idée est un peu plus complexe, j'aimerais que la macro vérifie dans chaque onglet si il y a quelque chose dans la meme cellule que la synthèse. On a l'adresse d'une cellule dans un onglet, on aimerai savoir qu'est ce qu'il y a à la même adresse mais dans un autre onglet. et afficher dans le message d'erreur le nom de l'onglet.

J'ai utilisé la sub worksheet_Change top !! Merci.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
De la même manière que tu boucles sur tes cellules.... tu peux boucler sur les onglets de ton classeur
For Each F In ThisWorkbook.Sheets
   msgbox F.Cells(ligne,colonne).value
Next

en remplacçant les variables ligne et colonne par les coordoneées que tu as trouvé juste avant....
(au lieu de address, tu pourras utiliser les attributs Row et Column de l'objet RANGE )
0
BACON
 
Merci vraiment merci, je sens que j'y suis presque : Mais j ai une erreur de compilation quand j'utilise IsEmpty :

Sub error()

For Each cellule In Sheets("Synthèse").Range("C4:OX116")
If cellule = "Erreur" Then
MsgBox "La personne est déjà affectée"
End If
Next
For Each F In ThisWorkbook.Sheets
If IsEmpty(F.Cells(cellule.Row, cellule.Column).Value) = True Then
MsgBox F.Name
End If
Next
End Sub
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Ta boucle sur les Feuille est en dehors de ta boucle sur tes cellules....
donc la variable "cellule" ne contient rien...
En plus le isEmpty sert à vérifier que la cellule est vide ... mais il me semblait que toi tu voulais vérifier la valeur qu'elle contenait (si un nom etait déjà rempli...)

NB: Pour poster du code sur le forum, merci de le faire en utilisant LES BALISES DE CODE (et en y précisant le langage)
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Merci d'y penser dans ton prochain message.
0