Help !!! Saisie automatique de toute une ligne ?

  • Initiateur de la discussion Initiateur de la discussion Phileufeu@yahoo.fr
  • 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 !

P

Phileufeu@yahoo.fr

Guest
Bonjour à tous,

Je suis un nouvel inscrit sur ce site et j’aurais besoin de votre aide et de votre expertise :

Je suis en train de rentrer des données dans un tableau excel concernant des joueurs de football. Je rentre le nom de chaque joueur dans la colonne A, puis différentes informations dans les colonnes suivantes : date naissance (B), lieu de naissance (C)…

Existe-t-il un moyen pour que quand je rentre le nom de joueur, excel le reconnaisse et me rentre les informations de toute la ligne ?

Quelques précisions :
- je suis sur excel 2004 pour mac
- mon logiciel est en anglais
- j’importe le nom des joueurs dans la colonne A en faisant un collage

Merci d’avance pour votre aide.
Philippe.
 
Re : Help !!! Saisie automatique de toute une ligne ?

Salut Gael,

Merci encore pour ta réponse à ma première demande.

Dans le fichier joint, je voudrais que quand je tape dans la case A21 un des noms déjà rentré, toute la ligne se remplisse automatiquement.

Tu crois que c'est possible?

Merci.
Philippe.
 

Pièces jointes

Re : Help !!! Saisie automatique de toute une ligne ?

Rebonsoir,

C'est plus simple avec une macro qui se déclenche lorsque tu saisis une donnée en colonne A (macro évènementielle). Si le joueur existe déjà, la macro va copier les colonnes B à G sur la nouvelle ligne, sinon, rien ne se passe.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Target.Column > 1 Then Exit Sub
With ActiveSheet.Range("A1:A" & Target.Offset(-1, 0).Row)
    Set c = .Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
    Range(c.Offset(0, 1), c.Offset(0, 6)).Copy
    Range(Target.Offset(0, 1), Target.Offset(0, 6)).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Target.Offset(1, 0).Select
    End If
End With
End Sub

Fais un essai en faisant un copier/coller d'un nom existant.

@+

Gael
 

Pièces jointes

Re : Help !!! Saisie automatique de toute une ligne ?

Gael,


Merci pour ta réponse.
J'y connais pas grand chose en macros. J'ai essayé de cherche des tutos sur le net mais rien de bien détaillé...

J'ai essayé d'en créer un et j'ai rentré ceci dans le module:

Sub Saisie()

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Target.Column > 1 Then Exit Sub
With ActiveSheet.Range("A1:A" & Target.Offset(-1, 0).Row)
Set c = .Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
Range(c.Offset(0, 1), c.Offset(0, 6)).Copy
Range(Target.Offset(0, 1), Target.Offset(0, 6)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Target.Offset(1, 0).Select
End If
End With
End Sub


Quand je clique run, un message me dit :
compile error
Expected End Sub

Tu sais ce que ça signifie?

Merci.
 
Re : Help !!! Saisie automatique de toute une ligne ?

Bonjour Philippe, Gaël,

C'est normal, le compilateur cherche la fin (End Sub) de la procédure saisie().

Il faut coller le code de Gael dans le module Feuil1.

Regarde le fichier joint, tu comprendras 😉
 
Re : Help !!! Saisie automatique de toute une ligne ?

Bonjour Phileufeu, bonjour Apt,

Une procédure comprend toujours un début et une fin "Sub Saisie()" et "End sub" par exemple.

Dans ton module le "sub saisie" est inutile puisqu'il y a déjà le "private sub..." qui constitue le début de procédure et il n'y a pas de "End sub" correspondant d'où l'erreur.

C'est d'autre part une procédure évènementielle, c'est à dire qui se déclenche automatiquement à l'occasion d'une action particulière, ici une modification de données dans "Feuil1". Il ne faut donc pas la lancer manuellement.

Si tu ouvres le fichier que je t'ai envoyé dans le post précédent, tu ajoutes simplement un nouveau nom dans la colonne A pour déclencher la procédure.

3 cas peuvent se produire:

* Modification d'une cellule autre qu'en colonne A: la procédure se déclenche mais se termine aussitôt par un "Exit sub".

* Création d'un nouveau nom en colonne A: La procédure se déclenche, recherche le nom en colonne A et comme elle ne le trouve pas, aucune action n'est exécutée.

* le nom saisi existe déjà: la procédure se déclenche, trouve le nom existant, copie les données des colonnes B à G et colle les valeurs dans les colonnes B à G de la nouvelle ligne saisie.

@+

Gael
 
Re : Help !!! Saisie automatique de toute une ligne ?

Bonjour Gael, Apt,

Merci pour vos réponses.

Pardon je n'avais pas vu le fichier "Saisie auto V1".
C'est vrai que sur ce fichier ça marche parfaitement.

Le problème est que j'ai déjà rentré d'autres noms de joueurs. J'ai donc essayé de coller ces joueurs (avec les informations sur les colonnes A à G) directement sur ton fichier "Saisie auto V1".
Mais excel me met "nationality" partout en gras dans la colonne B, "Place of birth" dans la C...

Existe-t-il un moyen pour que j'utilise ton fichier sur lequel ça marche (je ne me sens pas capable de recopier ton macro sur ma propre feuille excel) et que je colle dessus les noms que j'ai déjà rentré (une centaine).


je suis désolé je suis un peu nul...

Merci.

Philippe.
 
Re : Help !!! Saisie automatique de toute une ligne ?

Re,

Repart de ton fichier, c'est plus simple.

Tu fais alt-F11 pour ouvrir la page VBA
tu doublecliques sur "Feuil1 (Sheet1)" dans la liste "Microsoft Excel objets" dans la fenêtre de gauche.
Dans la fenêtre de droite, tu as une page blanche avec en haut "Option Explicit".

Tu copies le code suivant en dessous:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Target.Column > 1 Then Exit Sub
With ActiveSheet.Range("A2:A" & Target.Offset(-1, 0).Row)
    Set c = .Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
    Range(c.Offset(0, 1), c.Offset(0, 6)).Copy
    Range(Target.Offset(0, 1), Target.Offset(0, 6)).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Target.Offset(1, 0).Select
    End If
End With
End Sub

C'est presque le même que celui de mon exemple précédent, j'ai juste mis "Range("A2:..." au lieu de "Range("A1:..." pour ne pas tenir compte de la ligne de titres.

Si ça ne fonctionne pas, renvoie ton fichier original, je ferai la modif et les tests.

@+

Gael
 
- 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

Retour