• Initiateur de la discussion Initiateur de la discussion justine
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

justine

XLDnaute Occasionnel
bonjour a tous
et oui c'est la juju qui revient apres un an et demi d'absence
et j'ai beaucoup perdu dans le vba, donc je viens chercher de l'aide.
voila mon soucis
j'ai 10 feuilles de chargement d'avion et une feuille de grosse base de données
prenons exemple que sur une feuille de chargement
le tout en macro biensur

dans la feuille1 j'ai mis:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A28:A55")) Is Nothing Then
remplissage
End If
End Sub

dans les modules j'ai mis:
Sub remplissage()
Dim c As Range
Dim derl As Integer
derl = Sheets("base donnees").Range("a65000").End(xlUp).Row
For Each c In Sheets("base donnees").Range("a4:a" & derl)
If ........ Then
End If
Next
End Sub

le probleme est que je ne sais pas quoi mettre dans mes .......

mon but rechercher est le suivant:
je rentre un numero dans une cellule de la plage A28 a A55 de ma feuille de chargement
je regarde dans ma base de donneeé si ce numero existe
or, j'ai mis dans la feuille 1😛rivate Sub Worksheet_Change(ByVal Target As Range), donc apres changement de la valeur de la cellule, donc apres validation, donc la cellule change
donc la cellule n'est plus la meme je passe de A28 a A29 par exemple, donc il cherche le resultat par rapport a A29

j'espere que vous me comprenez.
merci
 
Re : validation cellule

Bonjour Justine, bonjour le forum,

C'est vrai ça faisait un bail qu'on ne te voyait plus... re bienvenue !

Mais pour en revenir à ton problème ce n'est pas très clair. L'événement Change va prendre en considération la cible (Target) et pas la cellule active (c'est l'événement SelectionChange qui fait ça). Donc si tu veux faire prendre en compte la valeur que tu as éditée il te suffirait, si j'ai bien compris, de dire :
Code:
If c.Value = Target.Value then...

Pardon je rectifie, il te faudra passer par une variable déclarée publique au niveau module (du style Public Mavar as Integer par exemple). Dans l'événement Change tu définis cette variable avec Mavar = Target.Value et après, dans la macro remplissage, If c.Value = Mavar then ...

p.s. je te conseille FIP de loin ce qu'il y a de plus ouvert et sans aucune pub....
 
Dernière édition:
Re : validation cellule

re le forum, robert
merci pour ta reponse tres rapide mais le resultat est malheureusement pas ce que je cherche
ce que je recherche est:
je suis dans ma feuille de chargement "1" et ma base de donnée est dans une autre feuille "bdd"

au changement de la valeur de la cellule A30 de la feuille "1", je cherche si cette valeur de A30 existe bien dans la plage de donnee de la feuille "bdd"

merci pour ton aide

merci pour la radio
 
Re : validation cellule

Bonjour le fil, justine, Robert

Comme l'a signalé Rober "L'événement Change prend en considération la cible (Target)"
et pour t'en convaincre essaie le bout de code suivant
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A28:A55")) Is Nothing Then MsgBox Target
End Sub
Pour le reste il te faut passer un paramètre à la Sub.
Par exemple
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A28:A55")) Is Nothing Then remplissage Target
End Sub
Code:
Sub remplissage(ByVal ch As String)
    Dim c As Range
 
    For Each c In Sheets("base donnees").Range("a4:a" & [a65536].End(xlUp).Row)
 
        If ch = c.Value Then MsgBox "Cette valeur existe déjà"
 
    Next
 
End Sub
A plus
 
Dernière édition:
Re : validation cellule

re
autre petite question qui s'ajoute

Sub remplissage(ByVal ch As String)
Dim c As Range

For Each c In Sheets("base donnees").Range("a4:a" & [a65536].End(xlUp).Row)

If ch = c.Value Then
ch.offset(0,1)=c.offset(0,1)
end if
Next

End Sub

ch est une variable string donc je fais comment pour mettre un offset a
ch?

merci pour l'aide
 
Re : validation cellule

Re,

Si tu as besoin de l'adresse de la cellule, tu peux essayer (par exemple)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A28:A55")) Is Nothing Then remplissage Target.Address
End Sub
Et,
Code:
Sub remplissage(ByVal ad As String)
    Dim c As Range
    Dim ch As String
 
    ch = Range(ad)
 
    For Each c In Sheets("base donnees").Range("a4:a" & [a65536].End(xlUp).Row)
 
        If ch = c.Value Then MsgBox "La valeur entrée en " & ad & " existe déjà en " & c.Address
 
    Next
 
End Sub
Pour faire un décalage à partir de Target.Address, dans la Sub
Code:
Range(ad).Offset(nb Ligne, nb colonne)
Rem : Tu peux aussi passer les 2 paramètres à la Sub ...

A plus
 
Dernière édition:
Re : validation cellule

Bonjour le fil,

@ justine, vous pouvez tranférer une varible Range, il suffit de la déclarer comme telle dans la Sub :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A28:A55")) Is Nothing Then remplissage Target
End Sub

Sub remplissage(Target As [COLOR="Red"]Range[/COLOR])
'Votre code
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
500
Réponses
3
Affichages
237
Retour