Compléter lignes depuis autre classeur (base de données ?)
Résolu
Nai
Messages postés
714
Date d'inscription
Statut
Membre
Dernière intervention
-
Nai Messages postés 714 Date d'inscription Statut Membre Dernière intervention -
Nai Messages postés 714 Date d'inscription Statut Membre Dernière intervention -
Bonjour tout le monde !
Je cherche à faire quelque chose, en vain. Mes recherches sont restées infructueuses. Peut-être n'ai-je tout simplement pas utilisé les bons mots... M'enfin
J'ai crée deux fichiers :
- Le premier contient les cellules vides que je souhaite remplir... https://www.cjoint.com/?DHmlmYTa2JF
- Avec le deuxième fichier contenant les données que je souhaite ajouter. https://www.cjoint.com/c/DHmltrrhok1
Ainsi, je souhaite que lorsque je tape M en A10 du premier fichier, s'affiche la liste des noms commençants par la lettre M du fichier "base de données".
Puis, si je clique sur MARTIN, que les trois cellules de MARTIN (du fichier de la base de données) soient ajoutées aux trois cellules jusqu'alors vide du fichier à remplir.
Il est important que seules les trois cellules horizontales soient ajoutées, puisque dans le fichier de réception, la quatrième cellule est utilisée (voir le fichier joint).
Aussi, si le fichier "base de données' n'existe pas, ne pas prendre en compte tout ceci.
Il doit falloir créer un lien, ou quelque chose du genre, mais impossible de trouver :/
Je vous remercie d'avance de votre aide !
Excel 2010.
Je cherche à faire quelque chose, en vain. Mes recherches sont restées infructueuses. Peut-être n'ai-je tout simplement pas utilisé les bons mots... M'enfin
J'ai crée deux fichiers :
- Le premier contient les cellules vides que je souhaite remplir... https://www.cjoint.com/?DHmlmYTa2JF
- Avec le deuxième fichier contenant les données que je souhaite ajouter. https://www.cjoint.com/c/DHmltrrhok1
Ainsi, je souhaite que lorsque je tape M en A10 du premier fichier, s'affiche la liste des noms commençants par la lettre M du fichier "base de données".
Puis, si je clique sur MARTIN, que les trois cellules de MARTIN (du fichier de la base de données) soient ajoutées aux trois cellules jusqu'alors vide du fichier à remplir.
Il est important que seules les trois cellules horizontales soient ajoutées, puisque dans le fichier de réception, la quatrième cellule est utilisée (voir le fichier joint).
Aussi, si le fichier "base de données' n'existe pas, ne pas prendre en compte tout ceci.
Il doit falloir créer un lien, ou quelque chose du genre, mais impossible de trouver :/
Je vous remercie d'avance de votre aide !
Excel 2010.
A voir également:
- Compléter lignes depuis autre classeur (base de données ?)
- Fuite données maif - Guide
- Base de registre - Guide
- Supprimer les données de navigation - Guide
- Partage de photos en ligne - Guide
- Formules mathématiques de base - Télécharger - Études & Formations
16 réponses
Bonjour,
La base de donnée est elle ouverte lors de la saisie dans l'autre classeur ?
Ou souhaitez vous qu'apparaisse la liste de saisie semi-automatique? Dans une ListBox?
La base de donnée est elle ouverte lors de la saisie dans l'autre classeur ?
Ou souhaitez vous qu'apparaisse la liste de saisie semi-automatique? Dans une ListBox?
La base de données n'est pas forcément ouverte. Une ListBox, c'est pas mal je pense. Cela évite-t-il d'avoir à ouvrir le classeur manuellement ?
Evi, désolé mais je n'ai pas compris :$
Evi, désolé mais je n'ai pas compris :$
Voici la première version de ton fichier feuille de présence.
Le code de la macro est accessible depuis le module de la feuille "feuille de présence".
Il nécessite, dans la feuille, deux contrôles :
1 textbox
1 listbox
Pour tester, ouvre les deux classeurs, vérifie que le nom du classeur base_de_donnee.xlsx est le même que celui indiqué dans la macro à cette ligne :
With Workbooks("base_de_donnee.xlsx").Sheets("Feuil1")
Si tout ok, essaie une saisie dans le textbox.
La base de données n'est pas forcément ouverte
Dans le code donné ici, il faut qu'elle le soit. Si cela ne te convient pas, dis le.
Le code de la macro est accessible depuis le module de la feuille "feuille de présence".
Il nécessite, dans la feuille, deux contrôles :
1 textbox
1 listbox
Pour tester, ouvre les deux classeurs, vérifie que le nom du classeur base_de_donnee.xlsx est le même que celui indiqué dans la macro à cette ligne :
With Workbooks("base_de_donnee.xlsx").Sheets("Feuil1")
Si tout ok, essaie une saisie dans le textbox.
La base de données n'est pas forcément ouverte
Dans le code donné ici, il faut qu'elle le soit. Si cela ne te convient pas, dis le.
Merci pijaku pour ta rapidité !
Ca fonctionne, mais pas partout.
Si je souhaite ajouter une personne ligne 11, ça m'édite la ligne 10... En la sélectionnant, pas de succès non plus.
En effet, s'il était possible de faire cela sans que la base de données soit ouverte, ce serait cool (le débogage m'a fait beugé :D )
Aussi, je ne pensais pas vraiment à une case de recherche, mais plutôt à la colonne A dont les cellules seraient des "chercheuses".
Exemple : En A10, je tape la lettre J, la cellule me propose JEAN, JORIS, JAURES. Si je clique sur JEAN, il m'ajoute en A10, B10 et C10 les cellules correspondantes de la base de données.
En A11, je tape la lettre P, la cellule propose PIERRE, PAUL. Si je clique sur PAUL, etc...
Je sais pas si c'est claire cette affaire :p
Ca fonctionne, mais pas partout.
Si je souhaite ajouter une personne ligne 11, ça m'édite la ligne 10... En la sélectionnant, pas de succès non plus.
En effet, s'il était possible de faire cela sans que la base de données soit ouverte, ce serait cool (le débogage m'a fait beugé :D )
Aussi, je ne pensais pas vraiment à une case de recherche, mais plutôt à la colonne A dont les cellules seraient des "chercheuses".
Exemple : En A10, je tape la lettre J, la cellule me propose JEAN, JORIS, JAURES. Si je clique sur JEAN, il m'ajoute en A10, B10 et C10 les cellules correspondantes de la base de données.
En A11, je tape la lettre P, la cellule propose PIERRE, PAUL. Si je clique sur PAUL, etc...
Je sais pas si c'est claire cette affaire :p
C'est clair, mais...
L'événement Change de la feuille de calcul ne se déclenche pas à la saisie des lettres dans une cellule. De plus, tu ne peux pas cliquer sur une partie de la cellule.
Ce que je t'ai bricolé est la meilleure solution : un textbox et une listbox. Tu peux jouer sur l'esthétique si tu le désires...
Pour l'insertion de ligne, je regarde ça de suite.
Egalement pour travailler avec le classeur base de données fermé...
L'événement Change de la feuille de calcul ne se déclenche pas à la saisie des lettres dans une cellule. De plus, tu ne peux pas cliquer sur une partie de la cellule.
Ce que je t'ai bricolé est la meilleure solution : un textbox et une listbox. Tu peux jouer sur l'esthétique si tu le désires...
Pour l'insertion de ligne, je regarde ça de suite.
Egalement pour travailler avec le classeur base de données fermé...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici : https://www.cjoint.com/c/DHmpOJNCMvm
Le classeur base de données doit être fermé absolument.
Il doit également être dans le même répertoire que celui-ci.
Si ça ne va pas comme fonctionnement, dis le
Attention, si tu passes en mode création ou que tu va dans l'éditeur VBA, il te faudra fermer puis ré-ouvrir le classeur pour que cela fonctionne...
Le classeur base de données doit être fermé absolument.
Il doit également être dans le même répertoire que celui-ci.
Si ça ne va pas comme fonctionnement, dis le
Attention, si tu passes en mode création ou que tu va dans l'éditeur VBA, il te faudra fermer puis ré-ouvrir le classeur pour que cela fonctionne...
Merci et désolé pour le délais.
Ca fonctionne, merci ! Mais... (évidemment :p )
Impossible d'ajouter des données manuellement (donc sans la base de données) après avoir ajouté une ligne. Le tout, sans retirer la protection. Dans mon VBA de départ, les colonnes A, B et C (NOM, Prénom, Date de naissance) n'étaient pas protégées, et permettaient l'ajout de données. Là, non. Aussi, tu as retiré la ligne concernant les enfants en dehors des tranches d'âge prévues, la tranche "???", mais bon, je le remettrais, mais je me suis dis qu'il y avait peut-être une raison ?
Encore, à l'ajout d'une nouvelle ligne, les formules ne prennent plus en compte cette insertion :/ J'ai remédié en incluant la ligne 9, bonne idée ou pas ?
Je ne parviens pas à modifier le champ de recherche. Je trouve qu'il n'est pas assez visible. Je voudrais l'encadrer et, mieux, ajouter un texte : "Ajouter un enfant depuis la base de donné" qui disparaîtrait au clic, possible ?
Encore merci pour l'attention que tu porte à ma demande !
Bien à toi,
Naï.
Ca fonctionne, merci ! Mais... (évidemment :p )
Impossible d'ajouter des données manuellement (donc sans la base de données) après avoir ajouté une ligne. Le tout, sans retirer la protection. Dans mon VBA de départ, les colonnes A, B et C (NOM, Prénom, Date de naissance) n'étaient pas protégées, et permettaient l'ajout de données. Là, non. Aussi, tu as retiré la ligne concernant les enfants en dehors des tranches d'âge prévues, la tranche "???", mais bon, je le remettrais, mais je me suis dis qu'il y avait peut-être une raison ?
Encore, à l'ajout d'une nouvelle ligne, les formules ne prennent plus en compte cette insertion :/ J'ai remédié en incluant la ligne 9, bonne idée ou pas ?
Je ne parviens pas à modifier le champ de recherche. Je trouve qu'il n'est pas assez visible. Je voudrais l'encadrer et, mieux, ajouter un texte : "Ajouter un enfant depuis la base de donné" qui disparaîtrait au clic, possible ?
Encore merci pour l'attention que tu porte à ma demande !
Bien à toi,
Naï.
Merci pour ton aide Pijaku ! :)
Il me reste simplement le problème cité plus haut :/
Celui pouvant être résolu si l'enfant est ajouté dans la base de donné.
En l'absence de celle-ci, tant pis :D
Il me reste simplement le problème cité plus haut :/
Celui pouvant être résolu si l'enfant est ajouté dans la base de donné.
En l'absence de celle-ci, tant pis :D
Bonjour,
Je ne comprends pas bien (clairement) ce que tu souhaites réaliser.
Pourrais tu être un peu plus explicite et nous repasser un fichier?
Je ne comprends pas bien (clairement) ce que tu souhaites réaliser.
Pourrais tu être un peu plus explicite et nous repasser un fichier?
Bonjour Pijaku :)
Voici le fichier servant de base de donnée : https://www.cjoint.com/c/DIwm7n4RhzX
Et le fichier qui l'appelle : https://www.cjoint.com/c/DIwm7RNGv74
En ouvrant le classeur Effectif, feuille "Feuille de présence".
Je clique sur Ajouter une ligne enfant.
Maintenant, en A10, je souhaite ajouter un enfant n'apparaissant pas dans la base de donnée.
Là, j'ai deux possibilité :
1) Ajouter l'enfant directement dans l'onglet Feuille de présence du classeur Effectif
2) Ajouter l'enfant à la base de donnée (donc, fermer le fichier effectif, ajouter l'enfant dans la base de donnée, fermer cette dernière et rouvrir l'effectif. Puisque le classeur base de donnée ne doit pas être ouvert en même temps que l'effectif, si j'ai bien compris.).
La première solution. Je n'y arrive pas. Je dois déprotéger la feuille pour ajouter un môme.
La deuxième solution est un soupçon contraignante :D
Le top du top serait qu'un enfant ajouté directement dans le classeur effectif soit ajouté à la base de donnée, mais j'en demande beaucoup, d'autant qu'en l'état actuel je ne peux pas ajouter d'enfant manuellement dans le classeur Effectif ;)
Voici le fichier servant de base de donnée : https://www.cjoint.com/c/DIwm7n4RhzX
Et le fichier qui l'appelle : https://www.cjoint.com/c/DIwm7RNGv74
En ouvrant le classeur Effectif, feuille "Feuille de présence".
Je clique sur Ajouter une ligne enfant.
Maintenant, en A10, je souhaite ajouter un enfant n'apparaissant pas dans la base de donnée.
Là, j'ai deux possibilité :
1) Ajouter l'enfant directement dans l'onglet Feuille de présence du classeur Effectif
2) Ajouter l'enfant à la base de donnée (donc, fermer le fichier effectif, ajouter l'enfant dans la base de donnée, fermer cette dernière et rouvrir l'effectif. Puisque le classeur base de donnée ne doit pas être ouvert en même temps que l'effectif, si j'ai bien compris.).
La première solution. Je n'y arrive pas. Je dois déprotéger la feuille pour ajouter un môme.
La deuxième solution est un soupçon contraignante :D
Le top du top serait qu'un enfant ajouté directement dans le classeur effectif soit ajouté à la base de donnée, mais j'en demande beaucoup, d'autant qu'en l'état actuel je ne peux pas ajouter d'enfant manuellement dans le classeur Effectif ;)
Bonjour,
Je t'ai préparé une petite interface de saisie.
Celle-ci s'ouvre lors d'un clic sur le bouton NOUVEL ENFANt.
Elle te permettra d'enregistrer un nouvel enfant dans la base de données.
Cet enfant sera disponible immédiatement après son enregistrement...
J'en ai profité également pour enlever 2 petits bugs :
- lorsque tu sortais du textbox sans rien saisir, la listbox restait affichée... Plus maintenant.
- il n'y a plus de message d'alerte "voulez-vous enregistrer les changements..."
Voici ton classeur en retour
Je t'ai préparé une petite interface de saisie.
Celle-ci s'ouvre lors d'un clic sur le bouton NOUVEL ENFANt.
Elle te permettra d'enregistrer un nouvel enfant dans la base de données.
Cet enfant sera disponible immédiatement après son enregistrement...
J'en ai profité également pour enlever 2 petits bugs :
- lorsque tu sortais du textbox sans rien saisir, la listbox restait affichée... Plus maintenant.
- il n'y a plus de message d'alerte "voulez-vous enregistrer les changements..."
Voici ton classeur en retour
- lorsque tu sortais du textbox sans rien saisir, la listbox restait affichée... Plus maintenant.
Magnifique !
il n'y a plus de message d'alerte "voulez-vous enregistrer les changements..."
Parfait ! Je m'en sortais en acceptant l'enregistrement :)
Merci pour le bouton ajouter un enfant à la base de donnée ! C'est fort pratique !
Un petit soucis, lorsque je saisi la lettre L (ou une autre) dans la zone de recherche, je ne parviens à voir plus d'un enfant dont le nom commence par cette lettre. Impossible de descendre, ni avec la molette de la souris, ni en cliquant sur la petite flèche du bas :/
Peut-être que j'utilise mal la zone ?
Magnifique !
il n'y a plus de message d'alerte "voulez-vous enregistrer les changements..."
Parfait ! Je m'en sortais en acceptant l'enregistrement :)
Merci pour le bouton ajouter un enfant à la base de donnée ! C'est fort pratique !
Un petit soucis, lorsque je saisi la lettre L (ou une autre) dans la zone de recherche, je ne parviens à voir plus d'un enfant dont le nom commence par cette lettre. Impossible de descendre, ni avec la molette de la souris, ni en cliquant sur la petite flèche du bas :/
Peut-être que j'utilise mal la zone ?
Salut,
Il est possible qu'une action décharge la base de données qui est placée en mémoire.
Je n'ai pas pu observer ce bug, mais j'ai ajouté un bouton "recharger base"...
https://www.cjoint.com/?DIzh6kgkTdA
Il est possible qu'une action décharge la base de données qui est placée en mémoire.
Je n'ai pas pu observer ce bug, mais j'ai ajouté un bouton "recharger base"...
https://www.cjoint.com/?DIzh6kgkTdA
Bonsoir,
Cela ne résous pas le problème... Voir : https://imageshack.com/i/hjxynEKap
Je pense (pense seulement) que la taille de la listbox est petite. Je n'ai pas trouvé où est écrit la taille.
En tout cas, recharger la base de données ne fonctionne pas :/
Cela ne résous pas le problème... Voir : https://imageshack.com/i/hjxynEKap
Je pense (pense seulement) que la taille de la listbox est petite. Je n'ai pas trouvé où est écrit la taille.
En tout cas, recharger la base de données ne fonctionne pas :/
Salut,
Si ça n'est que ça, augmente sa taille...
Pour cela :
- déprotège ta feuille,
- passe en mode création (onglet développeur, icône en forme d'équerre)
- clic sur la listbox
- augmente la autant que de besoin
- refait toutes les opérations à l'envers (enlève le mode création et reprotège ta feuille)
Si ça n'est que ça, augmente sa taille...
Pour cela :
- déprotège ta feuille,
- passe en mode création (onglet développeur, icône en forme d'équerre)
- clic sur la listbox
- augmente la autant que de besoin
- refait toutes les opérations à l'envers (enlève le mode création et reprotège ta feuille)
Tout simplement :D
En fait, ce sont les flèches qui ne semblent pas fonctionner...
J'ai beaucoup d'enfants dont le nom commence par LAL, ainsi, si je tape L, j'ai fait en sorte, via le mode création, d'afficher au moins deux enfants. Avec ce L, j'ai plein de mômes, et je ne peux pas descendre.
En gros, je dois faire en sorte, dans ma recherche, d'être si précis que je dois faire afficher deux enfants max.
Alors, je pourrais en effet étirer la zone bien plus bas, mais visuellement, ça me plait moins :p
Pourquoi ces flèches ne fonctionne pas ?
En fait, ce sont les flèches qui ne semblent pas fonctionner...
J'ai beaucoup d'enfants dont le nom commence par LAL, ainsi, si je tape L, j'ai fait en sorte, via le mode création, d'afficher au moins deux enfants. Avec ce L, j'ai plein de mômes, et je ne peux pas descendre.
En gros, je dois faire en sorte, dans ma recherche, d'être si précis que je dois faire afficher deux enfants max.
Alors, je pourrais en effet étirer la zone bien plus bas, mais visuellement, ça me plait moins :p
Pourquoi ces flèches ne fonctionne pas ?
Me revoilà !
Bonsoir !
https://forums.commentcamarche.net/forum/oldest/30645995-completer-lignes-depuis-autre-classeur-base-de-donnees#7
Le classeur base de données doit être fermé absolument.
Je me rend compte qu'en pratique, il pourrait être intéressant que le classeur base de données soit indifféremment ouvert ou fermé. Pijaku parlait de l'un ou de l'autre, mais les deux sont-ils possibles ?
Bonsoir !
https://forums.commentcamarche.net/forum/oldest/30645995-completer-lignes-depuis-autre-classeur-base-de-donnees#7
Le classeur base de données doit être fermé absolument.
Je me rend compte qu'en pratique, il pourrait être intéressant que le classeur base de données soit indifféremment ouvert ou fermé. Pijaku parlait de l'un ou de l'autre, mais les deux sont-ils possibles ?
Voici le classeur : https://www.cjoint.com/c/DJplapDO0IW
Merci de m'indiquer les macros et le texte modifié. J'ai une version 4 semaines à mettre à jour également :)
Merci encore !
Merci de m'indiquer les macros et le texte modifié. J'ai une version 4 semaines à mettre à jour également :)
Merci encore !
Alors, tu n'as qu'une ligne de code à modifier dans la procédure Workbook_Open :
Et ajouter cette fonction, en dessous du Workbook_Open (par exemple) :
Ce qui nous donne le module ThisWorkbook suivant :
Private Sub Workbook_Open() Dim derlig As Long On Error GoTo sortie 'ICI LA LIGNE MODIFIEE : If FichierOuvert("bdd.xlsx") = False Then Workbooks.Open ThisWorkbook.Path & "\bdd.xlsx" 'la ligne qui pose problème With Workbooks("bdd.xlsx").Sheets("Feuil1") derlig = .Range("A" & Rows.Count).End(xlUp).Row Sources = .Range("A2:C" & derlig).Value End With ActiveWorkbook.Close SaveChanges:=True With Sheets("Feuille de présence") .ListBox1.Visible = False End With supervision Exit Sub sortie: MsgBox "Désolé mais la base de données n'a pas été trouvé." & vbLf & "Pour utiliser une base de données, merci de placer le fichier bdd.xlsx dans le dossier : " & ThisWorkbook.Path & "" & vbLf & "Plus d'aide : www.lanimetvous.com" On Error GoTo 0 End Sub
Et ajouter cette fonction, en dessous du Workbook_Open (par exemple) :
Function FichierOuvert(NomFic As String) As Boolean Dim Wbk As Workbook FichierOuvert = False For Each Wbk In Application.Workbooks If Wbk.Name = NomFic Then FichierOuvert = True: Exit For Next Wbk End Function
Ce qui nous donne le module ThisWorkbook suivant :
Option Explicit Private Sub Workbook_Open() Dim derlig As Long On Error GoTo sortie If FichierOuvert("bdd.xlsx") = False Then Workbooks.Open ThisWorkbook.Path & "\bdd.xlsx" 'la ligne qui pose problème With Workbooks("bdd.xlsx").Sheets("Feuil1") derlig = .Range("A" & Rows.Count).End(xlUp).Row Sources = .Range("A2:C" & derlig).Value End With ActiveWorkbook.Close SaveChanges:=True With Sheets("Feuille de présence") .ListBox1.Visible = False End With supervision Exit Sub sortie: MsgBox "Désolé mais la base de données n'a pas été trouvé." & vbLf & "Pour utiliser une base de données, merci de placer le fichier bdd.xlsx dans le dossier : " & ThisWorkbook.Path & "" & vbLf & "Plus d'aide : www.lanimetvous.com" On Error GoTo 0 End Sub Function FichierOuvert(NomFic As String) As Boolean Dim Wbk As Workbook FichierOuvert = False For Each Wbk In Application.Workbooks If Wbk.Name = NomFic Then FichierOuvert = True: Exit For Next Wbk End Function Private Sub Workbook_BeforeClose(Cancel As Boolean) finSupervision End Sub Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) If Sh.Type = xlWorksheet Then Sh.Protect "alsh", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowInsertingColumns:=True, AllowInsertingRows:=True, _ AllowInsertingHyperlinks:=True Else ' Graph Sh.Protect "alsh", DrawingObjects:=True, Contents:=True, Scenarios:=True End If End Sub
Tout petit problème : Si la bdd est ouverte avant le classeur principal, impossible d'ouvrir le classeur.
Je pense qu'il s'ouvre, puis se referme, d'après le visuel.
Je pense que c'est cette ligne qui dit de ferme le classeur si bdd est ouvert :
En modifiant True en False, pas mieux. Presque pire en fait :D
Il me propose de rouvrir bdd.xlsx mais que toutes modifications seront perdues. Si j'accepte de rouvrir, il le ferme :D
Je pense qu'il s'ouvre, puis se referme, d'après le visuel.
Je pense que c'est cette ligne qui dit de ferme le classeur si bdd est ouvert :
If Wbk.Name = NomFic Then FichierOuvert = True: Exit For
En modifiant True en False, pas mieux. Presque pire en fait :D
Il me propose de rouvrir bdd.xlsx mais que toutes modifications seront perdues. Si j'accepte de rouvrir, il le ferme :D