mistersaku
Messages postés38Date d'inscriptionsamedi 17 février 2007StatutMembreDernière intervention21 octobre 2010
-
1 mars 2008 à 07:42
mistersaku
Messages postés38Date d'inscriptionsamedi 17 février 2007StatutMembreDernière intervention21 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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
mistersaku
Messages postés38Date d'inscriptionsamedi 17 février 2007StatutMembreDernière intervention21 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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
mistersaku
Messages postés38Date d'inscriptionsamedi 17 février 2007StatutMembreDernière intervention21 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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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...
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