Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    Copier la valeur d'une cellule dans cellule en dessous
    Bonjour à toutes et tous.
    Voila, j'ai une table avec plusieurs champs.
    La voici:


    Donc mon problème ce situ sur le Champ1.
    Je voudrais que temps que Champ1 est vide, il copie la valeur du dessus sur ce champ, donc A4 pour les X première cellules vides du Champ1.
    Si on lis A3, il copiera A3 sur les cellules vide d'en dessous. et ainsi de suite si il y a d'autre valeur
    Le tout pour avoir le Champ1 complet.
    Avez vous une solution simple pour cela. Requête?

  2. #2
    Membre expérimenté
    Bonjour,

    Une solution avec 3 requêtes et une modification de la table d'origine.
    Supposons que le table se nomme T1 et qu'elle est dotée d'une clé numérique auto incrément qui se nomme Num. Si la clé n'existe pas il faut la créer


    Tu crée la requête 1 nommé R1
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T1.Champ1, T1.Num, (SELECT min(t2.num) from T1 as t2 where t2.Num>T1.Num AND t1.Champ1<>null) AS NumLimite
    FROM T1
    WHERE T1.Champ1) Is Not Null);


    Ensuite la requête de mise à jour suivante:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    UPDATE R1, T1 SET T1.Champ1= R1.Champ1WHERE T1.Num>R1.Num And T1.Num<R1.NumLimite;


    Il va rester la dernière plage de valeur qu'il faudra faire en une requête avec des valeurs ciblée.

    Peut être qu'il ya une autre solution.
    Amicalement

  3. #3
    Membre du Club
    Merci pour ton aide, mais j'ai rien compris.
    J'aurais du préciser que je suis nul en sql, macro et vba

  4. #4
    Membre du Club
    Donc là 'ai réussi à mettre la clé primaire (NumClient)
    Je l'ai expliqué là: Ici

    J obtient donc cette table là:

    Sur l'image, il ne faut pas lire Format mais Champ1
    Maintenant, je suis pommé, peux tu m’éclairer? Je ne comprend pas trop les T1, R1, T2 ...

  5. #5
    Rédacteur/Modérateur

    Bonjour à vous deux,

    Je me permet de proposer une requête utilisant des fonctions de domaine au lieu des sous-requêtes :

    Code sql :Sélectionner tout -Visualiser dans une fenêtre à part
    UPDATE T_Clients SET Champ1 = DLookUp("Champ1","T_Clients","NumClient=" & DMax("NumClient","T_Clients","NumClient<=" & [NumClient] & " and Not IsNull(Champ1)"));


    Ici je suppose que la table se nomme "T_Clients".

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Quand on a la tête dans le guidon,...

  6. #6
    Membre expérimenté
    Citation Envoyé par User Voir le message
    Bonjour à vous deux,

    Je me permet de proposer une requête utilisant des fonctions de domaine au lieu des sous-requêtes :

    Code sql :Sélectionner tout -Visualiser dans une fenêtre à part
    UPDATE T_Clients SET Champ1 = DLookUp("Champ1","T_Clients","NumClient=" & DMax("NumClient","T_Clients","NumClient<=" & [NumClient] & " and Not IsNull(Champ1)"));


    Cdlt,
    Bonjour,
    J'ai pas testé mais est ce que cette requête ne remplace pas toutes les valeur nulle par la même première occurence trouvée?

    La difficulté ici se trouve dans la limite de chaque plage à remplacer.
    La première requete permet davoir un résultat du genre

    A4
    Champs1 debut NumLimite
    A4 1 6
    A3 7 12

    C'est cette requête
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT T1.Champ1, T1.Num, (SELECT min(t2.num) from T1 as t2 where t2.Num>T1.Num AND t1.Champ1<>null) AS NumLimite
    FROM T1
    WHERE T1.Champ1) Is Not Null);


    En créantt une nouvelle requête ou vous remplacez T1 par le nom de ta table et num par ta clé primaire. Nommez cette requête R1.

    La deuxiéme requête (qu'il faut créer) fera la mise à jour en utilisant le champ NumLimite pour ne pas dépasser de plage.
    Amicalement

  7. #7
    Rédacteur/Modérateur

    Citation Envoyé par DMboup Voir le message
    Bonjour,
    J'ai pas testé mais est ce que cette requête ne remplace pas toutes les valeur nulle par la même première occurence trouvée?

    .
    Bonjour et merci pour l'intérêt

    En fait le max permet de remplacer les valeurs nulles par la dernière occurrence non nulle parmi les précédentes.

    Vôtre remarque m'a permis de mieux expliquer les choses

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Quand on a la tête dans le guidon,...

  8. #8
    Membre du Club
    Citation Envoyé par User Voir le message
    Bonjour à vous deux,

    Je me permet de proposer une requête utilisant des fonctions de domaine au lieu des sous-requêtes :

    Code sql :Sélectionner tout -Visualiser dans une fenêtre à part
    UPDATE T_Clients SET Champ1 = DLookUp("Champ1","T_Clients","NumClient=" & DMax("NumClient","T_Clients","NumClient<=" & [NumClient] & " and Not IsNull(Champ1)"));


    Ici je suppose que la table se nomme "T_Clients".

    Cdlt,
    Je viens de tester et cela me donne uniquement la colonne Champ1

  9. #9
    Rédacteur/Modérateur

    Bonjour,

    Cette requête met à jour le "champ1" de votre table, elle n'est pas pour l'affichage.

    Il faut l'exécuter en double-cliquant dessus ou en appuyant sur le point d'exclamation en mode création de la requête.

    Ensuite, vous ouvrez votre table pour visualiser le résultat.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Quand on a la tête dans le guidon,...

  10. #10
    Membre du Club
    Citation Envoyé par DMboup Voir le message
    Bonjour,
    J'ai pas testé mais est ce que cette requête ne remplace pas toutes les valeur nulle par la même première occurence trouvée?

    La difficulté ici se trouve dans la limite de chaque plage à remplacer.
    La première requete permet davoir un résultat du genre

    A4
    Champs1 debut NumLimite
    A4 1 6
    A3 7 12

    C'est cette requête
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT T1.Champ1, T1.Num, (SELECT min(t2.num) from T1 as t2 where t2.Num>T1.Num AND t1.Champ1<>null) AS NumLimite
    FROM T1
    WHERE T1.Champ1) Is Not Null);


    En créantt une nouvelle requête ou vous remplacez T1 par le nom de ta table et num par ta clé primaire. Nommez cette requête R1.

    La deuxiéme requête (qu'il faut créer) fera la mise à jour en utilisant le champ NumLimite pour ne pas dépasser de plage.

    Je viens de tester et j'ai ce résultat:


    Le NumLimite ne s'arrete pas à 7.

  11. #11
    Membre du Club
    Citation Envoyé par User Voir le message
    Bonjour,

    Cette requête met à jour le "champ1" de votre table, elle n'est pas pour l'affichage.

    Il faut l'exécuter en double-cliquant dessus ou en appuyant sur le point d'exclamation en mode création de la requête.

    Ensuite, vous ouvrez votre table pour visualiser le résultat.

    Cdlt,
    Il me signale une erreur avec "NumClient<=" et "NumClient="

  12. #12
    Rédacteur/Modérateur

    Pouvez-vous nous donner le message d'erreur exacte ?

    C'est au moment de l'exécution de la requête ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Quand on a la tête dans le guidon,...

  13. #13
    Membre du Club
    Citation Envoyé par User Voir le message
    Pouvez-vous nous donner le message d'erreur exacte ?

    C'est au moment de l'exécution de la requête ?

    Cdlt,
    Donc au moment d'exécution, il affiche plusieurs choses, les voici:


    Si je Clique directement sur OK
    J'ai:


    Si je mets un chiffre ex:7, j'ai






    Voila ps pour information, pour ne pas changer votre ligne de commande, j'ai changé le nom de ma table (cela évite les erreurs de ma part)

  14. #14
    Rédacteur/Modérateur

    Comment se nomme votre table ?

    Moi j'avais mis "T_Clients" il faut remplacer ce nom par le votre.

    Ou postez votre base ce sera plus simple

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Quand on a la tête dans le guidon,...

  15. #15
    Membre du Club
    Citation Envoyé par User Voir le message
    Comment se nomme votre table ?

    Moi j'avais mis "T_Clients" il faut remplacer ce nom par le votre.

    Ou postez votre base ce sera plus simple

    Cdlt,
    Pfff j'avais pas mis le "s"

    Maintenant j'ai ce message:

    Mais maintenant j'ai toute la colonne champ1 vide

  16. #16
    Membre du Club
    NON NON

    Plutot OUI c'est bon tu es un chef
    Je te remerci beaucoup pour ton aide.
    Franchement si tu habites sur Béthune dans le Pas de Calais, je veux bien t'offrir un verre.

  17. #17
    Rédacteur/Modérateur

    J'ai de la famille du côté de Saint-Omer, mais je suis loin de là

    Pas de souci;

    la solution de DMLoop marchait aussi mais il vous fallait créer une requête en plus.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Quand on a la tête dans le guidon,...

  18. #18
    Membre du Club
    Citation Envoyé par User Voir le message
    J'ai de la famille du côté de Saint-Omer, mais je suis loin de là

    Pas de souci;

    la solution de DMLoop marchait aussi mais il vous fallait créer une requête en plus.

    Cdlt,
    Encore merci.
    Pour information, il faut que je lance la requête 2 fois pour que le travail se face.
    Pour quelle raison?
    Pourriez vous m'expliquer un peu ce que fait en détaille cette commande? (j'aime bien comprendre comment ça fonctionne).

  19. #19
    Rédacteur/Modérateur

    Essayer avec len([Champ1])>0 au lieu de Not IsNull([Champ1]) :

    Code sql :Sélectionner tout -Visualiser dans une fenêtre à part
    UPDATE T_Clients SET T_Clients.Champ1 = DLookUp("Champ1","T_Clients","NumClient=" & DMax("NumClient","T_Clients","(NumClient<=" & [NumClient] & ") and len([Champ1])>0"));


    Vous avez surement des chaînes vides au lieu de valeurs nulles.

    Quelques explications :

    le DMax renvoie le plus grand numéro du client pour lequel le champ est vide, celui qui précède le numéro de la ligne courante :

    ...DMax("NumClient","T_Clients","(NumClient<=" & [NumClient] & ") and len([Champ1])>0")).

    le DLookUp renvoie la valeur du champ1 pour le numéro de client max évalué avec DMax

    DLookUp("Champ1","T_Clients","NumClient=" & DMax("NumClient",...

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON


    Quand on a la tête dans le guidon,...

  20. #20
    Membre du Club
    Merci pour les explications

###raw>template_hook.ano_emploi###