Aide VBA excel

Résolu
Bonjour à tous,
j'ai un projet a faire en VBA mais la je sèche un peu. Je dois faire une macro qui copiera un certain nombre de cellules et ira les coller dans une autre feuille selon le debut de la valeur de la cellule.
Je vais essayer d'être le plus clair possible:
j'ai une feuille dans laquelle chaque ligne (collonne A) commence par eBI suivi d'un nombre, I suivi d'un nombre ou P suivi d'un nombre. Je souhaiterai faire une macro qui copierai tout ce qui commence par eBI dans une feuille et tout ce qui commence pas I dans une autre. Par exemple, si la cellule A1 commence par eBI, la macro doit faire un copier/coller des cellules A1 à H1 vers la première cellule vide de la feuille eBI et la même chose si la cellule A1 (ou A2...) commence par I mais vers la feuille nommée I.
Merci de m'aider et désolé si je n'ai pas été très clair.
Configuration: Windows XP Internet Explorer 6.0

15 réponses

  1. Sub Bouton1_QuandClic()
    Dim i As Long

    For i = 1 To 400 'nombre de ligne à contrôler
    If Left(Range("a" & i), 3) = "eBI" Then
    Sheets("Feuil2").Range("a65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("a" & i).Value
    Sheets("Feuil2").Range("b65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("b" & i).Value
    Sheets("Feuil2").Range("c65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("c" & i).Value
    Sheets("Feuil2").Range("d65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("d" & i).Value
    Sheets("Feuil2").Range("e65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("e" & i).Value
    Sheets("Feuil2").Range("f65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("f" & i).Value
    Sheets("Feuil2").Range("g65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("g" & i).Value
    Sheets("Feuil2").Range("h65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("h" & i).Value
    End If

    If Left(Range("a" & i), 1) = "I" Then
    Sheets("Feuil3").Range("a65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("a" & i).Value
    Sheets("Feuil3").Range("b65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("b" & i).Value
    Sheets("Feuil3").Range("c65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("c" & i).Value
    Sheets("Feuil3").Range("d65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("d" & i).Value
    Sheets("Feuil3").Range("e65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("e" & i).Value
    Sheets("Feuil3").Range("f65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("f" & i).Value
    Sheets("Feuil3").Range("g65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("g" & i).Value
    Sheets("Feuil3").Range("h65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("h" & i).Value
    End If
    Next i
    End Sub
    0
    1. Change bien les noms Feuil1, Feuil2 et Feuil3 en nom de tes feuilles

      J'ai défini la macro pour les lignes 1 a 400 mais tu peux en mettre plus ou moins
      0
      1. Je te remercie, je vais essayer ça de ce pas
        0
        1. J'ai bien remplacé le nom des feuilels mais malheureusement ca ne marche pas. Je n'ai aucun message a l'execution de la macro mais elle ne fait apparemmentrien
          0
          1. colle ta macro ici
            0
            1. Ba j'ai repris exactement ce que tu as fait en changeant Feuil1 par le nom de la feuille ou il y'a toutes mes données "en vrac", Feuil2 par le nom de la feuille ou je veux copier tout ce qui commence par eBI et Feuil3 par le nom de la feuille ou je veux copier tout ce qui commence par I.
              0
          2. Bizarre, la macro fonctionnait pourtant sur mon classeur.

            As tu possibilité de poster ton classeur sur cijoint.fr?
            0
            1. Bon, en voulant te le mettre, je l'ai refait pour ne garder que l'essentiel, seulement ce dont le classeur avait besoin pour ce que je voulait et là, ça a marché. Je me suis donc probablement trompé quelque part en remplacant un nom de feuille ou autre. Je vais regarder ca et te tenir au courant. En tout cas, merci de ton aide
              0
          3. Ok

            Bon ben hésite pas si t'as d'autres questions
            0
            1. Bon ba moi je ne vois pas de quoi ca peut venir, je sollicite donc encore un peu ton aide.
              Le premier c'est mon classeur officiel, celui sur lequel j'effectue mon projet.
              L'autre c'est la partie que j'avais refaite exprès pour te la poster, celle qui marche.

              http://www.cijoint.fr/cjlink.php?file=cj201002/cij9YaZ4Tp.xls

              http://www.cijoint.fr/cjlink.php?file=cj201002/cijoTnjiRe.xls
              0
              1. Je ne comprends pas, tu as du te tromper dans le code

                copie cette macro et lance la dans ton classeur officiel

                Sub Bouton87_QuandClic()
                Dim i As Long

                For i = 1 To 400 'nombre de ligne à contrôler
                If Left(Range("a" & i), 1) = "I" Then
                Sheets("i fermés").Range("a65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("a" & i).Value
                Sheets("i fermés").Range("b65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("b" & i).Value
                Sheets("i fermés").Range("c65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("c" & i).Value
                Sheets("i fermés").Range("d65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("d" & i).Value
                Sheets("i fermés").Range("e65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("e" & i).Value
                Sheets("i fermés").Range("f65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("f" & i).Value
                Sheets("i fermés").Range("g65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("g" & i).Value
                Sheets("i fermés").Range("h65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("h" & i).Value
                End If

                If Left(Range("a" & i), 3) = "eBI" Then
                Sheets("eBI fermées").Range("a65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("a" & i).Value
                Sheets("eBI fermées").Range("b65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("b" & i).Value
                Sheets("eBI fermées").Range("c65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("c" & i).Value
                Sheets("eBI fermées").Range("d65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("d" & i).Value
                Sheets("eBI fermées").Range("e65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("e" & i).Value
                Sheets("eBI fermées").Range("f65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("f" & i).Value
                Sheets("eBI fermées").Range("g65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("g" & i).Value
                Sheets("eBI fermées").Range("h65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("h" & i).Value
                End If

                Next i
                End Sub
                0
                1. je viens de m'apercevoir que je ne t'ai pas passé la bonne version de mon classeur, du coup tu n'as pas du trouver la macro que tu m'avais donné je pense. Si tu es encore la, le voici
                  http://www.cijoint.fr/cjlink.php?file=cj201002/cijeEZAt2q.xls
                  c'est plus ou moins le meme classeur que l'autre que je t'ai donné sauf que celui-ci me sert de test avant de modifier ma version "finale"
                  0
                  1. Et bien je ne vois pas le souci. La macro marche.

                    Crée un bouton d'action (affichage/barre d'outils/formulaire/ Bouton)

                    Clique droit sur le bouton que tu crées / Appliquer une macro / Bouton1quand click

                    Et ensuite quand tu cliques sur le bouton, les lignes se copient comme convenu
                    0
                    1. J'ai trouvé le soucis, il fallait que je lance la macro en etant sur la feuille que j'ai appelé "full" (celle ou il y à toute la liste), j'ai donc corrigé ca. Par contre j'avoue ne pas vraiment comprendre ton code malgré l'aide de microsoft visual basic. Pourrait tu juste m'expliquer ceci ?
                      "Sheets("i fermés").Range("a65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("a" & i).Value "
                      0
                      1. "Sheets("i fermés") onglet "i fermés"

                        Range("a65536").End(xlUp).Offset(1, 0) dernière case vide de la colonne A en partant la Case A65536

                        Sheets full onglet "full"

                        Range("a" &i).value Valeur de la case Ai,i étant défini comme une variable de 1 à 400

                        A chaque fois, la macro contrôle les valeurs pour i=1 (A1), i=2 (a2), etc etc jusqu'à 400

                        Autrement dit:

                        La première case vide de l'onglet "i fermé" dans la colonne A est égale à la case Ai de l'onglet "Full"
                        0
                        1. Et bien il ne me reste plus qu'à te remercier infiniement pour ton aide précieuse qui m'a evitée de me faire perdre une journée qui ne m'aurait peut etre à rien.
                          Merci a toi cher Farfadet88 ;-)
                          0
                          1. De rien.

                            Hésite pas si t'as d'autres questions.
                            0