IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Excel Discussion :

Mettre à jour ma feuille 2 lors de l'ajout d'une ligne sur ma feuille 1


Sujet :

Excel

  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut Mettre à jour ma feuille 2 lors de l'ajout d'une ligne sur ma feuille 1
    Salut à tous,

    Je dois modifier un fichier excel pour que lorsque j'ajoute une ligne à la feuille 1, j'utilise les infos ajoutés pour mettre à jour la feuille 2:
    - L'une des cellules renseignées en feuille 1 me donne la colonne à mettre à jour
    - Une autre me donne la ligne à mettre à jour
    - Une troisième me donne le montant à additionner à la cellule concernée de la feuille 2.

    Avant de m'engager là dedans et d'essayer d'écrire une macro, je me dis qu'il doit y a voir une solution plus "simple". Une suggestion?

    Merci!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Avant de m'engager là dedans et d'essayer d'écrire une macro, je me dis qu'il doit y a voir une solution plus "simple"
    Pas vraiment, mais macro ne rime pas forcément avec "compliqué".
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    Si je dois faire une macro, je me dis qu'il faudrait créer une fenêtre contenant un formulaire avec les valeurs de toutes les cellules à renseigner sur la feuille 1. J'insérerai ensuite tout ça sur la dernière ligne vide de la feuille 1, et je mettrai à jour la 2 dans la foulée.

    Je me demandais surtout s'il y a des bonnes pratiques pour faire ce genre de choses*. Je suis familier avec Visual Studio (vb .net) mais j'ai fait peu de macros sous excel jusque là.

    *par exemple:
    - Comment identifier la dernière ligne non remplie
    - Comment verrouiller par défaut un document, le déverrouiller via la macro pour effectuer les changements et le reverrouiller ensuite

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je pense que c'est possible à faire sans macro avec une SOMME.SI.ENS à mettre dans chacune des cellules où tu veux faire une somme.
    Tu mets comme critères de recherche les colonnes dans lesquelles se trouves les numéros de ligne et de colonne.
    Tu mets comme valeur de critère le numéro de colonne et de ligne de la cellule où se trouve la SOMME.SI.ENS avec des fonctions LIGNE() et COLONNE() (un des rares cas où ça ne te fera pas une référence cyclique).
    Tu mets en valeur à sommer la colonne dans laquelle se trouve les montants à sommer.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Il me semble que tes énoncés sont contradictoires (message #1) :

    - Une autre me donne la ligne à mettre à jour
    et (message #3) :

    - Comment identifier la dernière ligne non remplie
    Quel énoncé faut-il retenir ?

    - Comment verrouiller par défaut un document, le déverrouiller via la macro pour effectuer les changements et le reverrouiller ensuite
    On verrouille une cellule et on protège une feuille ou un classeur. Je suppose que tu pense à la protection de la feuille ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  6. #6
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    Il me semble que tes énoncés sont contradictoires (message #1)
    Non pas vraiment. Dans le premier message je présente le problème comme il s'est posé, à savoir mettre à jour une feuille 2 lors de l'ajout de données dans la feuille 1.
    Le message 3 décrit un mode d'insert "assisté" via un formulaire dans une windows form. Dans ce cas là, je dois savoir quelle est la dernière ligne vide puisque l'ajout n'est pas manuel (comme dans mon premier message).

    Je pense que c'est possible à faire sans macro avec une SOMME.SI.ENS à mettre dans chacune des cellules où tu veux faire une somme.
    Tu mets comme critères de recherche les colonnes dans lesquelles se trouves les numéros de ligne et de colonne.
    Tu mets comme valeur de critère le numéro de colonne et de ligne de la cellule où se trouve la SOMME.SI.ENS avec des fonctions LIGNE() et COLONNE() (un des rares cas où ça ne te fera pas une référence cyclique).
    Tu mets en valeur à sommer la colonne dans laquelle se trouve les montants à sommer.
    Merci Menhir, je vais étudier ça.

  7. #7
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par billybobbonnet Voir le message
    - Comment identifier la dernière ligne non remplie
    Propriété End de l'objet Range.
    De préférence, utilise-le avec le paramètre xlUp au cas où il y aurait des trous dans ta liste.

    - Comment verrouiller par défaut un document, le déverrouiller via la macro pour effectuer les changements et le reverrouiller ensuite
    Méthodes Protect et Unprotect de l'objet Worksheet
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  8. #8
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    Je suis parvenu à avoir un résultat en utilisant SOMME.SI.ENS. Pour le moment, par contre, je dois citer explicitement chaque cellule concernée.

    Voilà à quoi ressemble la formule. "A32" est la valeur présente dans la colonne d'entête de ligne de la feuille 2 et "Mes" la ligne d'entête des colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI.ENS(Feuil1!C2:C1000;Feuil1!A3:A1001;"=A32";Feuil1!B3:B1001;"=Mes")
    Sur le principe, ça marche donc mais il me faut savoir, dans l'ordre:
    - Pour les valeurs à ajouter, si je fais Feuil1!C:C j'ai une erreur #VALEUR à cause de la cellule d'entête de la colonne C. Comment référer à toutes les valeurs de la colonne C excepté la ligne d'entête?
    EDIT: j'ai trouvé, avec l'option "trier" en spécifiant qu'il y a une ligne d'entête.
    - Pour les valeurs "=A32" et "=Mes" je dois les citer littéralement. Comment spécifier "le contenu de la première cellule de ma colonne/ligne" avec l'opérateur "=*" ? Je me doute que ça a à voir avec les fonctions COLONNE() et LIGNE() mais je sèche. Si je fais "=A" & LIGNE(), j'obtiens bien le code de la cellule, mais pas son contenu. Si je fais "=" & COLONNE() & "1" j'obtiens un numéro à la place de la lettre de colonne, par exemple "51"

    Merci!

  9. #9
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    version avec le lien relatif aux cellules d'entêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI.ENS(Feuil1!$C:$C;Feuil1!$A:$A;"=A" & LIGNE();Feuil1!$B:$B;"=" & COLONNE() & "1")
    Où j'ai le problème cité ci-dessus

  10. #10
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par billybobbonnet Voir le message
    =SOMME.SI.ENS(Feuil1!C2:C1000;Feuil1!A3:A1001;"=A32";Feuil1!B3:B1001;"=Mes")
    Il semble curieux que la plage sommée soit décalée d'une ligne par rapport aux plages de critère.

    Pour les valeurs "=A32" et "=Mes" je dois les citer littéralement. Comment spécifier "le contenu de la première cellule de ma colonne/ligne" avec l'opérateur "=*"?
    Il y a plusieurs possibilités.
    La plus simple est de remplacer ton "=A32" par "="&ADRESSE(LIGNE(A37);COLONNE(A37))

    Quant à ton "Mes", je ne sais pas d'où il sort. Je ne peux donc pas te dire comment le renseigner automatiquement.

    Je me doute que ça a à voir avec les fonctions COLONNE() et LIGNE() mais je sèche.
    Tu avais dit dans ton premier message que les numéros de ligne et de colonne étaient dans des cellules différentes.
    Si tu changes la structure de tes données, prends la peine de le signaler.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    On s'est mal compris. "A32" n'est pas un nom de cellule, c'est un contenu. Désolé d'avoir pris un nom équivoque.

    Je n'ai pas changé la structure des données. je vais reprendre tout ça pour clarifier. Voilà ma feuille 1:

    CODES LABELS MONTANTS
    NB33 Papier 10
    NB36 Papier 20
    NB33 Carton 15

    Voilà ma feuille 2
    Carton Papier Plastique
    NB33 15 10 0
    NB34 0 0 0
    NB35 0 0 0
    NB36 0 20 0

    Lors de l'ajout d'une ligne à la feuille 1, je veux que la 2 mette les montants totaux à jour. Dans la feuille 1:
    - La colonne CODE me donne la ligne concernée dans la feuille 2
    - La colonne LABELS me donne la colonne concernée dans la feuille 2
    - La colonne MONTANTS me donne la valeur à ajouter à la cellule identifiée par les colonnes CODE et LABELS

  12. #12
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    en reprenant ton tout premier post

    Citation Envoyé par billybobbonnet Voir le message
    Salut à tous,

    Je dois modifier un fichier excel pour que lorsque j'ajoute une ligne à la feuille 1, j'utilise les infos ajoutés pour mettre à jour la feuille 2:
    - L'une des cellules renseignées en feuille 1 me donne la colonne à mettre à jour
    - Une autre me donne la ligne à mettre à jour
    - Une troisième me donne le montant à additionner à la cellule concernée de la feuille 2.

    Avant de m'engager là dedans et d'essayer d'écrire une macro, je me dis qu'il doit y a voir une solution plus "simple". Une suggestion?

    Merci!
    Je remarque que la fonction Index(...) répond exactement à ta demande

    A+
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  13. #13
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    Merci IglooBel!

    pour remplir ma feuille 2, voici la formule qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI.ENS(Feuil1!$C:$C;Feuil1!$B:$B;"="&INDEX($A$1:$F$1000;1;COLONNE());Feuil1!$A:$A;"="&INDEX($A$1:$F$1000;LIGNE();1))
    Dernière question: j'ai désigné la plage d'index $A$1:$F$1000 pour ne pas m'embêter si le nombre de colonnes ou de lignes changent. Je préfèrerais faire une référence directe à la feuille 2.
    Le problème c'est que INDEX(Feuil2;LIGNE();1)) ne marche pas. Y a t il un alias à utiliser pour désigner une feuille en plage d'index?

    Encore merci

Discussions similaires

  1. [XL-2003] copie d'une ligne sur autre feuille
    Par sofynet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/07/2011, 14h25
  2. Supprimer une ligne sur deux feuilles du même classeur
    Par apdf1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/03/2011, 12h28
  3. [XL-2007] Incrémenter d'une ligne dans la feuille l'écriture de la saisie d'une textbox
    Par iriane dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/08/2010, 16h40
  4. Réponses: 1
    Dernier message: 12/09/2008, 16h06
  5. [VBA-E] ajout d'une ligne dans 2 feuilles
    Par PHPdudimanche dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/12/2006, 10h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo