Copier coller avec condition

Résolu
Thlone -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je souhaiterai avoir une macro pour faire des copier coller avec conditions en automatique:
Voila le tableau d'origine
A B
27 01/12/10 01/12/10 1209-45

adj accrued expenses acct
6 12/18/09 12/18/09 1209-40

33 11/09/09 11/09/09 1009-57

25 11/05/09 11/05/09 1009-54

30 01/13/10 01/13/10 1209-59

36 11/09/09 11/09/09 1009-59

ADJ BAD DEBT EXPENSE

Et voila ce a quoi je voudrais aboutir en automatique
A B
27 01/12/10 01/12/10 1209-45
27 01/12/10 01/12/10 1209-45
27 01/12/10 01/12/10 1209-45
6 12/18/09 12/18/09 1209-40
6 12/18/09 12/18/09 1209-40
33 11/09/09 11/09/09 1009-57
33 11/09/09 11/09/09 1009-57
25 11/05/09 11/05/09 1009-54
25 11/05/09 11/05/09 1009-54
30 01/13/10 01/13/10 1209-59
30 01/13/10 01/13/10 1209-59
36 11/09/09 11/09/09 1009-59
36 11/09/09 11/09/09 1009-59
36 11/09/09 11/09/09 1009-59
36 11/09/09 11/09/09 1009-59

En gros on copie les deux premieres cellules de la premiere ligne (ex : Cell 1:27 Cell : 01/12/10 01/12/10 1209-45) jusqu'a ce que la cellule de la premiere colonne ne soit plus vide. Peu importe ce qu'il y a dans la colonne B le test se faisant sur la colonne A tant que c'est vide on recopie.

Merci de votre reponse cela m'evitera tous les mois de faire 50 mille fois ctrl C/ctrl V.
Configuration: Windows XP Iexcel 2003

6 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Je pense que c'est qcq chose ça que tu veux :
    Sub recopie()
        Dim c As Range
        For Each c In Range([A2], [A65536].End(xlUp))
            If c = "" Then
                c.Offset(-1, 0).Resize(1, 2).Copy (c)
            End If
        Next c
        End Sub
    End Sub

    Sélectionner la feuille concernée et lancer la macro

    eric
    0
    1. Thlone
       
      Bonjour Merci de ta reponse mais comme je suis debutant en macro je ne vois pas du tout comment la "parametrer" pour l'adapter a mon fichier comme par exemple dois-je remplacer "c" par quelque chose?
      Car sinon j'ai toujours une erreur.

      Merci encore de ton aide
      0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Il n'y a rien à paramétrer sauf si tu ne veux pas traiter la colonne entière.
    Si tu ne veux traiter que la partie sélectionnée en colonne A remplace:
    For Each c In Range([A2], [A65536].End(xlUp
    par:
    for each c in selection

    Elle marche sur toute feuille sélectionnée, même d'un autre classeur. Si tu travailles toujours le même classeur tu la mets dedans, sinon tu peux la mettre dans un autre et ouvrir celui-ci quand tu en as besoin.

    Pour l'ajouter :
    - Alt+F11 pour ouvrir l'éditeur vba
    - clic-droit sur le projet à gauche
    - insertion / module
    - coller le code à droite

    Quand tu la lances par Alt+F8 dans les propriétés tu peux définir un raccourci clavier
    0
    1. Thlone
       
      Merci mais ca doit etre moi le probleme, je vais ouvrir un livre de VBA car a chaque fois j'ai le debogueur qui se lance et me surligne en jaune la ligne c.Offset(-1, 0).Resize(1, 2).Copy (c).
      Mais bon en fait il faut que je rajoute quelque chose car le test logique se situe dans la colonne A mais il faut egalement que je recopie en meme temps ce qu'il y a dans la colonne B.
      Par exemple si j'ai ca sur trois colonnes:
      18 01/08/10 01/08/10 1209-25 30-03-6081-90
      30-03-2407
      ADJ BAL TO MATCH BCSAS 30-03-6081-90
      30-03-2408
      30-03-8304-90
      30-03-2323
      30-03-6081-90
      30-03-2323
      23 02/11/09 02/11/09 0109-39 30-03-6080-90
      30-03-1012
      Je voudrais obtenir ca a la fin:
      18 01/08/10 01/08/10 1209-25 30-03-6081-90
      18 01/08/10 01/08/10 1209-25 30-03-2407
      18 01/08/10 01/08/10 1209-25 30-03-6081-90
      18 01/08/10 01/08/10 1209-25 30-03-2408
      18 01/08/10 01/08/10 1209-25 30-03-8304-90
      18 01/08/10 01/08/10 1209-25 30-03-2323
      18 01/08/10 01/08/10 1209-25 30-03-6081-90
      18 01/08/10 01/08/10 1209-25 30-03-2323
      23 02/11/09 02/11/09 0109-39 30-03-6080-90
      23 02/11/09 02/11/09 0109-39 30-03-1012

      En effacant au passage "ADJ BAL TO MATCH BCSAS" que je ne veux plus.

      Si tu penses pouvoir le reproduire assez rapidement je suis preneur mais sinon je vais chercher...
      Bon en fait je te demande vraiment ton aide ;)
      Merci d'avance.
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    ca doit etre moi le probleme
    Pas tout à fait, j'avais testé avec le code sur la feuille, mais mis dans un module pour pouvoir être exécuté sur n'importe quelle feuille il faut changer la syntaxe.

    il faut que je rajoute quelque chose car le test logique se situe dans la colonne A mais il faut egalement que je recopie en meme temps ce qu'il y a dans la colonne B.
    non non, ça le fait avec le .resize

    En effacant au passage "ADJ BAL TO MATCH BCSAS" que je ne veux plus.
    Effacer ou supprimer les 2 cellules ?
    J'ai choisi la 2nde option. Sinon echange avec la ligne en commentaire

    Pour que tu puisses tester si c'est vraiment ça que tu voulais : Thlone.xls
    0
    1. Thlone
       
      Le test marche super bien sauf pour le "ADJ BAL TO MATCH BCSAS" en fait sur la deuxieme colonne il faut remplacer ou copier dessus ce que l'on copie de la premiere ligne.
      J'ai ajoute ca car je ne savais pas si avec la macro quand tu recopies dans les nouvelles cellules si l'une d'entre elles n'eatait pas vde ce la marcherait.
      En fait la premiere ligne fait reference et doit etre recopier jusqu'a la nouvelle reference peu importe s'il y a quelque chose en dessous dans la deuxieme colonne.
      Je ne sais pas si je suis clair. Mais en tout cas encore un grand merci.

      Voila l'exemple http://www.cijoint.fr/cjlink.php?file=cj201002/cijdbyvwdl.xls
      0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    à voir ton fichier j'ai plutôt l'impression que c'est la colonne C qu'il faut prendre en référence si tu veux que les dernières lignes soient remplies.
    Thlone.xls
    0
    1. Thlone
       
      La colonne c est juste en reference mais ce sont des donnees aleatoires donc je ne vois pas du tout comment y appliquer un test logique.
      Tu sais si sur un fichier de 35 mille lignes je dois faire un copie paste pour la fin du fichier ca me va parfaitement.
      Tu as reussi a simuler quelque chose sur cette base meme si la derniere ligne ne se copie pas.
      En fin je pense plutot que d'apres l'algorythme elle se copiera jusqu'a la fin (car tout est vide apres) sauf a definir exactement la plage de donnee comme tu me l'as conseille plutot.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Teste l'exemple du post 7 basé sur colonne C et dis si c'est ok
    0
    1. Thlone
       
      Ca marche super un grand MERCI pour cette contribution.
      0
  7. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    ok, n'oublie pas de mettre en résolu...
    0