Comparer une cellule dans plusieurs onglet

Fermé
BACON - Modifié le 11 oct. 2018 à 15:52
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 11 oct. 2018 à 17:24
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
11 oct. 2018 à 15:57
Bonjour,

Comme ceci

 MsgBox cellule.Address

1
Merci :)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
11 oct. 2018 à 15:58
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
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 mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié le 11 oct. 2018 à 16:12
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
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
11 oct. 2018 à 16:55
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
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
11 oct. 2018 à 17:24
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