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 :

Macro pour copier une colonne à partir d'une cellule aleatoire


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    chimiste
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : chimiste

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Par défaut Macro pour copier une colonne à partir d'une cellule aleatoire
    Bonjour,

    Je me permets de poster sur le forum car je bloque sur une macro depuis plusieurs jours. je suis débutant sur l'encodage donc je ne connais pas grand chose et je n'ai pas trouvé de solution sur le net.
    Voila ma problématique avec un exemple:

    Dans une 1ere feuille j'ai un tableau, et je viens sélectionner une cellule à la main: (j'ai pris I3 comme exemple)

    Nom : unknown1.gif
Affichages : 751
Taille : 12,8 Ko

    Ensuite je lance une macro qui va me copier les données sous une autre feuille:

    Nom : unknown2.gif
Affichages : 754
Taille : 7,0 Ko

    Dans mon exemple, comme j'ai pris la cellule I.3 de la feuil1. Il faut que toutes les infos de la ligne 3 passent dans la Feuil2.
    Mon problème est que ma cellule de sélection n'est jamais la même, donc je ne peux pas utiliser le Offset. Alors comment faire pour définir une colonne et une ligne par rapport à une cellule variable?

    Mon début de code:
    Nom : unknown3.gif
Affichages : 1097
Taille : 8,8 Ko

    J’espère avoir utilisé les bons termes et être clair.
    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Comme tu connais toujours la ligne sélectionnée, aussi bien y aller avec les lettres de colonnes.
    La ligne = Activecell.Row
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheets("Feuil2").Range("B8") = Range("I" & activecell.Row)

  3. #3
    Candidat au Club
    Homme Profil pro
    chimiste
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : chimiste

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Par défaut
    Bonjour Parmi,

    Merci pour la réponse mais j'ai dû mal m’exprimer. Je suis désolé.

    En faite, ma cellule variable va être entre la colonne "G" et "O" , et de la ligne "3" à "+∞" de la feuil1. Et selon mon choix de cette cellule variable, je dois reporter Ax, Bx, Cx, Dx, Ex et Fx de la feuil1 sur la feuil2 (x = la ligne de ma cellule variable). C'est les colonnes de A à F qui me posent problème pour les envoyer de la feuil1 à la feul2 car m'a cellule variable n'est pas toujours dans la même colonne donc pas de "Offset" et avec "Range", je ne vois pas comment l’écrire.

    Par exemple: Je sélectionne la cellule L5 de la feuil1 avec un import sur la feuil2. Donc je veux aussi que de A5 à F5 de la feuil1 soit sur la feuil2 automatiquement. Puis après je fais une autre sélection. Je vais prendre la cellule O4 de la feuil1 avec un import sur la feuil2 et je veux transfert de A4 à F4 sur la feuil2 toujours automatiquement.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Ça revient au même.
    Où que tu sois sur ta ligne, tu sais que ce sont les données de cette ligne que tu veux copier (transférer), donc tu utilises Activecell.Row pour déterminer d'où proviennent les données et tu les transfères où c'est nécessaire.
    Le Offset n'est pas une nécessité...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sheets("Feuil2").Range("B8") = Range("I" & activecell.Row)
    Sheets("Feuil2").Range("B9") = Range("G" & activecell.Row)
    Sheets("Feuil2").Range("E9") = Range("H" & activecell.Row)
    Si tu ne sais pas combien de colonnes de données tu dois transférer (ex: G à XYZ), tu peux faire une boucle avec une variable
    À ce moment-là, il faudrait savoir ce que tu veux transférer et où...
    On voit qu'il y a des prix 1, prix 2, prix 3,... que veux-tu faire avec ceux-là ?

  5. #5
    Candidat au Club
    Homme Profil pro
    chimiste
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : chimiste

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Par défaut
    Le prix 1, 2 ou 3 doit être transfert sur la feuil2 quand la cellule est remplie.

    Je vais expliqué un peu le fonctionnement du fichier et de ma macro par rapport au prix:

    Les colonnes "prix réels" vont être remplies selon le choix du client (Dans l'exemple: 3 articles avec 3 colonnes avec 3 types d'options et que 3 clients. En réalité, il y a plus de 300 articles avec environs 100 colonnes et 10 types d'options et entre 30 à 100 clients par jours donc un tableau énorme que je n'ai pas le droit de modifier). Donc le "prix réel" va être mon choix de départ pour faire ma sélection (Dans l'exemple: soit la colonne I, L, O et sélectionner un prix dans une des trois colonnes pour extraire la ligne).
    Et pourquoi prendre le "prix réel" en point de départ et pas autre chose? C'est parce qu'il y a quelques prix qui ne sont pas dans les limites du "prix mini" et du "prix max" (prix mini et prix max sont variables selon l'article, les options et le type de client). Dans le cas où il y a un prix hors limite, nous devons faire un rapport à la main et remettre pas mal d'information qu'il y a déjà sur le fichier alors une grosse perte de temps. Nous voudrions automatiser la chose et ne plus mettre que l'explication et la signature à la main. Et donc je veux faire un macro avec une sélection manuel du "prix réel" hors limite et extrait toutes les informations que nous avons besoin sur cette commande pour faire une impression de cette commande sans le superflu d'un tableau et sous un format plus formulaire.
    Après avez vous peut-être une autre idée pour extraire la ligne sans la remettre en forme de tableau et sans les casses vides (je ne pars peut-être pas dans le bon sens pour la macro)?

    J’espère que vous voyez un peu plus compris le fonctionnement de la macro que je veux créer.
    Je ferai un essai demain au travail avec votre codage. Merci d'avoir pris le temps.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Avec ce qu'on voit dans tes images, on ne voit qu'une série de prix pour chaque client.
    Est-ce que c'est toujours le cas ?
    Parce que s'il peut y avoir plusieurs séries de prix min, max, réels, il faut prévoir un endroit où les mettre...

    Autrement, un boucle qui part de la colonne 7 (G) et va vers la fin à droite par saut de 3 colonnes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LimiteDroite = Cells(2, Columns.count).end(xlToLeft).column  'dernière cellule remplie de la ligne 2
    For i = 7 to LimiteDroite Step 3
       If cells(activecell.row, i) <> "" then
          'onremplit les cases comme je mentionnais
       End if
    Next
    Edit: je viens de m'apercevoir que j'avais oublié le Step 3...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Besoin d'un code pour vérifier l'existence d'une chaine à partir d'une colonne dans une autre
    Par Chedy Smida dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/02/2015, 17h05
  2. Macro pour imprimer des elements à partir d'une feuille excel
    Par SATDVB dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/08/2013, 06h49
  3. [XL-2010] Macro pour filtrer un TCD à partir d'une cellule
    Par Chrislezoud dans le forum Excel
    Réponses: 5
    Dernier message: 22/03/2013, 10h38
  4. [XL-2010] Macro pour renommer des fichiers à partir d'une liste de nom de fichiers
    Par thomahh dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/01/2013, 17h03
  5. Réponses: 2
    Dernier message: 31/01/2008, 17h58

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