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

Macros et VBA Excel Discussion :

[E-07] - Regrouper deux colonnes en une seule


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 30
    Points : 9
    Points
    9
    Par défaut [E-07] - Regrouper deux colonnes en une seule
    Bonjour,

    J'ai créer un fichier excel avec que je dois mettre à jour tous les mois dans une feuille (Feuil1)
    Colonne B = Référence
    Colonne C = Désignation
    Colonne D = Prix OEM

    Pour cela, j'ai un autre fichier (Feuil2) qui se présente de la manière suivante :
    Colonne A = Référence
    Colonne B = Désignation
    Colonne C = Prix OEM

    Il peut arriver qu'une cellule de la colonne C (Feuil2) soit vide alors que la même cellule dans la colonne D (Feuil1) contient déjà une valeur. J'ai déjà une macro qui peut me faire la mise à jour mais automatiquement elle écrase les anciennes valeurs.
    Je voudrais créer une macro qui mettrait à jour la colonne D de la Feuil1 mais qui tienne compte des cellules non vides.

    Pour faire simple, je souhaite créer une macro qui exécute l'opération suivante :

    La cellule (C,4) contient une valeur et la cellule (D,4) aussi alors je remplace le contenu de (D,4) par le contenu (C,4).
    La cellule (C,5) ne contient pas de valeur et la cellule (D,5) aussi alors je laisse le contenu de (D,5).

    Merci pour votre aide.

  2. #2
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 30
    Points : 9
    Points
    9
    Par défaut
    En fait je suis obligé pour l'instant de créer un nouveau fichier, de coller les deux colonnes (B = Ancien prix et C = nouveau prix). De créer une règle de calcul donc voici la formule que j'utilise actuellement :

    =SI(C1=0;(B1);SI(C1<>B1;(C1)))

    Le problème est qu'il y a 11900 lignes et donc je voudrais automatiser tout cela avec une macro.

    Merci pour votre aidre.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Citation Envoyé par lolonico Voir le message
    La cellule (C,4) contient une valeur et la cellule (D,4) aussi alors je remplace le contenu de (D,4) par le contenu (C,4).
    La cellule (C,5) ne contient pas de valeur et la cellule (D,5) aussi alors je laisse le contenu de (D,5).
    Je n'ai pas compris ce passage: la cellule C4 de quelle feuille? La cellule C5 de quelle feuille? Tu remplace au un par un ou tu cherche la dernière entrée?

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 30
    Points : 9
    Points
    9
    Par défaut
    En fait, pour mettre à jour mes prix, j'insère dans un nouveau fichier, les colonnes suivantes :

    Colonne A = Référence
    Colonne B = Ancien prix
    Colonne C = Nouveau prix
    Colonne D = Prix

    Le soucis que je rencontre est que dans la colonne C, il y a des cellules vides alors qu'il existe un ancien prix pour la même référence.

    Ma formule me permet de mettre à jour dans la colonne D mes prix et laisse les anciens prix si le nouveau prix est à 0.

    Voilà j'espère avoir répondu à tes questions.

    J'ai mis en fichier joint un exemple de mon fichier.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Pour ma part je ne télécharge pas les fichiers, mais je viens enfin de comprendre.

    Alors dans ton cas, rien de bien compliqué:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim prix_a_charger As String
    prix_a_charger = Sheets("Feuil2").Range("C4").Value
    If prix_a_charger <> "0" And IsNumeric(prix_a_charger) Then
        Sheets("Feuil1").Range("D4").Value = prix_a_charger
    End If
    Testé. Quand c'est du texte ou n'improte quoi qui n'est pas un nombre, ça ne fait pas le remplacement. Tu adaptes pour que ça marche pour n'importe quelle cellule.

    PS: au passage, je remercie le premier à m'expliquer (par MP car sinon ça va encore hurler au loup) pourquoi beaucoup de personnes plus ou moins confirmées auraient écrit la condition comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If prix_a_charger <> "0" And IsNumeric(prix_a_charger) = True Then
    En effet, les booléens ont été créés entre autres pour qu'on n'ait plus à écrire = True ou = False et à rendre le code plus intelligible.
    Est-ce parce que l'exécution est plus rapide? Ou quelque chose d'autre?

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/10/2010, 10h48
  2. regrouper deux requetes en une seule
    Par philuser dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2009, 20h18
  3. SQL : Regrouper des lignes dans une seule colonne
    Par manoir62 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/02/2009, 18h06
  4. Réponses: 5
    Dernier message: 18/12/2008, 10h12

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