Projet excel: demande d'aide

Résolu
mistersaku Messages postés 38 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 21 octobre 2010 - 1 mars 2008 à 07:42
mistersaku Messages postés 38 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 21 octobre 2010 - 2 mars 2008 à 18:34
Bonjour à tous,

Je suis très loin de maitriser les macros et j'aurais besoin d'un petit coup de main pour un de mes projets.


J'ai un document excel sur lequel j'ai plusieurs lignes, sur la colonne C j'ai le choix entre 3 options, remplacer, reparer et non.


Si sur une des lignes j'ai autre chose que "non" je dois copier la ligne et la coller a partir de la ligne 100. Les lignes doivent se suivre les unes apres les autres.

Ex:
Sur ligne 1, colonne C = Remplacer
Sur ligne 2, colonne C = Non
Sur ligne 3, colonne C = Non
Sur ligne 4, colonne C = Reparer

Apres macro

Ligne 100 = ligne 1
Ligne 101 = ligne 4

Ca parait simple mais j'ai des pages et des pages de macro et je suis sur qu'il y a qq de bcp plus simple.

Merci pour votre aide.

8 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 mars 2008 à 18:31
For i = 2 to 99
    if LCase(range("C" & i)) = "non" then
        Range("A" & i & ":C" & i).Copy
        range("A" & nbLignes).PasteSpecial
        nbLignes = nbLignes + 1
    End If
Next

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 mars 2008 à 15:01
Je vois 2 possibilités:

1- tu boucles de la première ligne à la dernière ligne de données (< 100) et tu vérifies si la cellule LCase(Range("C" & ligne)) = "non". Si oui, tu copies (Rows(Ligne).Copy)
Ensuite, tu colles sur la première ligne vide
Range("A" & LigneVide). PasteSpecial

2- S'il y a au moins une ligne vide entre la ligne 100 et les données précédentes, tu filtres la colonne sur "non" et tu copies le résultat tout d'un coup. En utilisant l'enregistreur de macro, tu devrais y arriver facilement.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
mistersaku Messages postés 38 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 21 octobre 2010
2 mars 2008 à 17:29
Merci Mpi mais les personnes qui vont utiliser ce document excel ne sont pas des pros du tableur, ce que je recherche c'est une macro qui fait tout à leur place. Et pour rien te cacher je ne suis pas non plus un pro en la matière, si tu pouvais m'expliquer un peu plus en details le programme que je peux mettre ca m'aiderais bien.

Mistersaku
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 mars 2008 à 17:47
Je ne connais pas ton programme... C'est donc à toi de définir les besoins.

Tu pourrais utiliser un UserForm qui contient un ou des combobox, disons. Dans ceux-ci tu mets les valeurs des colonnes qui sont nécessaires. Lorsqu'un choix est fait, tu filtres la colonne selon ce choix, tu sélectionnes la plage résultant de ce choix et copies/colles sur la ligne 100

Pense à utiliser l'enregistreur de macro...
Une fois le code généré, tu l'épures au besoin et tu le places dans l'événement Click du combobox ou d'un bouton "Confirmer"...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mistersaku Messages postés 38 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 21 octobre 2010
2 mars 2008 à 18:03
Ce que j'avais commencé a faire c'était


Si C2 different de Non alors copier A2, B2, C2 et les coller a la ligne 100
Si C3 different de Non alors copier A3, B3, C3 et les coller a la ligne 101
Etc...

J'ai un programme gigantesque et puis j'ai des lignes, a partir de 100, qui sont vides donc je pensais ajouter:

Si A100 = rien alors effacer la ligne 100
Si A101 = rien alors effacer la ligne 101
Etc...


Pour rien te cacher j'ai plus de 200 lignes alors je te raconte pas le taille du programme, je maitrise mal les boucles.

Si je ne trouve pas j'utiliserais le filtre comme tu me l'as conseillé mais en second recours.

Mistersaku
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 mars 2008 à 18:13
Pour connaître la première ligne vide en "A" de la feuille (là où copier)
nbLignes = Cells(Rows.Count, "A").End(xlUp).Row + 1

Si je comprends ton problème, tu as des valeurs de la ligne 1 ou 2 jusqu'à quelque part avant la ligne 100... c'est ça ? si oui, j'espère que cette ligne 100 sera constante...

nbLignes = Cells(Rows.Count, "A").End(xlUp).Row + 1

For i = 2 to 99
    if LCase(range("C" & i)) = "non" then
        rows(i).Copy  ' si tu veux la copier, sinon Cut si tu veux la couper
        range("A" & nbLignes).PasteSpecial
        nbLignes = nbLignes + 1
    End If
Next

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
mistersaku Messages postés 38 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 21 octobre 2010
2 mars 2008 à 18:26
Chapeau bas, ça marche.
Si je veux copier uniquement les 3 premières cellules et non toute la ligne comment je peux faire.


Merci pour ton aide précieuse.
0
mistersaku Messages postés 38 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 21 octobre 2010
2 mars 2008 à 18:34
Merci infiniment, que la force soit avec toi mon ami.

Mistersaku
0
Rejoignez-nous