Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Saisie automatique

  • Initiateur de la discussion Initiateur de la discussion thibault1989
  • 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 !

T

thibault1989

Guest
Bonjour à tous,

Voici mon problème :
Pour faire simple, dans un classeur j'ai 2 feuilles. La première est une feuille de saisie dans laquelle j'ai 2 colonnes : la 1ère dans laquelle j'entre des codes modèles, et la 2ème dans laquelle j'entre le nom du modèle.
La deuxième feuille est une base de données dans laquelle j'ai 2 colonnes avec dans la première tous les codes modèles existants, et dans la deuxième les noms de modèles correspondants.

Le but de la manœuvre est de pouvoir remplir soit le code modèle soit le nom du modèle dans la feuille de saisie, et que l'autre info soit remplie automatiquement, à l'aide de la base de donnée.

J'ai essayé avec une boucle et une fonction de recherche mais j'aimerais que la saisie automatique se fasse au moment de la validation de la saisie de la 1ère info.

Est-ce que vous voyez un bout de code VBA qui ferait l'affaire?

Merci,

Thibault
 
Re : Saisie automatique

Non, désolé mais merci quand même.
La tu pars d'une base de donnée pour créer un formulaire, mais moi j'aimerai partir de mon formulaire pour créer une base de donnée (en gros). Tu as vu mon fichier ?
 
Re : Saisie automatique

Re,

Rien compris au post #3, mais je poste quand même ce que j'ai fait sur base post #1 :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [A2:B65536], Me.UsedRange)
If Target Is Nothing Then Exit Sub
Dim lig As Variant
Application.EnableEvents = False
With Sheets("BDD") 'à adapter
  For Each Target In Target 'en cas d'entrées multiples
    If Target.Column = 1 Then
      Target.Offset(, 1) = ""
      lig = Application.Match(Target, .[A:A], 0)
      If IsNumeric(lig) Then _
        Target.Offset(, 1) = .Cells(lig, 2)
    Else
      Target.Offset(, -1) = ""
      lig = Application.Match(Target, .[B:B], 0)
      If IsNumeric(lig) Then _
        Target.Offset(, -1) = .Cells(lig, 1)
    End If
  Next
End With
Application.EnableEvents = True
End Sub
A placer dans le code de la feuille Entrées.

Fichier joint.

A+
 

Pièces jointes

Re : Saisie automatique

Bonjour le fil, le forum,

Sans doute ne faut-il pas effacer la cellule voisine.

Une MFC sur A:B colore les valeurs qui ne sont pas dans BDD (nom défini).

La macro "simplifiée" :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [A:B], Me.UsedRange)
If Target Is Nothing Then Exit Sub
Dim lig As Variant
Application.EnableEvents = False
For Each Target In Target 'en cas d'entrées multiples
  lig = Application.Match(Target, [BDD].Columns(Target.Column), 0)
  If IsNumeric(lig) Then _
  Cells(Target.Row, 1).Resize(, 2) = [BDD].Cells(lig, 1).Resize(, 2).Value
Next
Application.EnableEvents = True
End Sub
Fichier joint.

A+
 

Pièces jointes

Re : Saisie automatique

Juste une dernière question, étant relativement débutant sur VBA, je serais très reconnaissant envers une personne qui pourrait m'expliquer la démarche utilisée dans un des 2 codes de job75.
Quitte à utiliser VBA, autant comprendre ce qu'on fait!

Et est-ce normal que la commande (revenir en arrière) est inactive dans le classeur une fois le code entré dans VBA?

Merci!

Thibault
 
Dernière modification par un modérateur:
Re : Saisie automatique

Re,

Quand vous ne comprenez pas un mot, utilisez l'aide VBA (touche F1).

Commentaires pour le 2ème code :

Code:
'toutes les variables doivent être déclarées
Option Explicit

'cette macro se déclenche quand le contenu d'une cellule de la feuille est modifié
Private Sub Worksheet_Change(ByVal Target As Range)
'redéfinit Target avec l'intersection de 3 plages
Set Target = Intersect(Target, [A:B], Me.UsedRange)
'si Target n'existe pas, fin de la macro
If Target Is Nothing Then Exit Sub
'déclare la variable lig
Dim lig As Variant
'désactive l'action des événements
Application.EnableEvents = False
'boucle pour étudier chaque cellule de Target
For Each Target In Target 'en cas d'entrées multiples
  'Application.Match c'est la fonction EQUIV
  lig = Application.Match(Target, [BDD].Columns(Target.Column), 0)
  'si la ligne a été trouvée, lig est numérique, copie des 2 cellules de BDD
  If IsNumeric(lig) Then _
  Cells(Target.Row, 1).Resize(, 2) = [BDD].Cells(lig, 1).Resize(, 2).Value
Next
'réactive l'action des événements
Application.EnableEvents = True
End Sub
Fichier (2).

A+
 

Pièces jointes

- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
15
Affichages
450
Réponses
6
Affichages
569
Réponses
1
Affichages
171
Réponses
5
Affichages
306
Réponses
9
Affichages
320
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…