Commande vba

Francis -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Est-ce qu'il est possible si j'ai une base de données exemple de 300 lignes et que chaque ligne se copie dans une des 5 pages selon ce qui est inscrit dans la colonne e ?

Exemple si dans la ligne 5 colonne E c'est inscrit A ça va dans la première page;

si dans la ligne 6 colonne E c'est inscrit B ça va dans la 2e page...

De préférence la commande se lance seulement quand je fais une action exemple cliquée dans la cellule A6.

Merci de votre aide

1 réponse

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Voici une macro qui fait ce que tu souhaites :

    Option Explicit
    Private Sub Worksheet_BeforeDoubleClick(ByVal sel As Range, Cancel As Boolean)
    Dim ong As String, lig As Long
        Cancel = True
        Select Case Cells(sel.Row, "E").Value
            Case "A"            ' valeur base
                ong = "Feuil1"  ' nom feuille
            Case "B"
                ong = "Feuil2"
            Case "C"
                ong = "Feuil3"
            Case "D"
                ong = "Feuil4"
            Case "F"
                ong = "Feuil5"
            Case Else
                Exit Sub
        End Select
        With Sheets(ong)
            lig = .Cells(Rows.Count, "A").End(xlUp).Row + 1
            Rows(sel.Row).Copy Destination:=.Rows(lig)
            MsgBox "Copie effectuée en feuille " & ong
        End With
    End Sub
    

    Elle s'exécute avec un double clic sur la ligne à copier.
    il faut remplacer les "valeur base" par tes valeurs et le "nom feuille" par tes noms.

    Si la colonne A n'est pas toujours documentée tu modifies le A de cette ligne :
            lig = .Cells(Rows.Count, "A").End(xlUp).Row + 1
    0
    1. Francis
       
      Je viens de la tester tout marche parfaitement bien le seul petit problème de cette façon je dois cliquer sur toutes les lignes il a pas un moyen de faire 150 lignes d'un seul coup ?
      0
    2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      il a pas un moyen de faire 150 lignes d'un seul coup ?

      On peut le faire mais pas avec un double clic qui ne prend qu'une cellule.
      Alors presque la même :
      Public Sub copier_lignes()
      Dim ong As String, lig As Long, sel As Object, nbl As Integer
          For Each sel In Selection.Rows
              Select Case Cells(sel.Row, "E").Value
                  Case "A"            ' valeur base
                      ong = "Feuil1"  ' nom feuille
                  Case "B"
                      ong = "Feuil2"
                  Case "C"
                      ong = "Feuil3"
                  Case "D"
                      ong = "Feuil4"
                  Case "E"
                      ong = "Feuil5"
                  Case Else
                      Exit Sub
              End Select
              With Sheets(ong)
                  lig = .Cells(Rows.Count, "A").End(xlUp).Row + 1
                  Rows(sel.Row).Copy Destination:=.Rows(lig)
                  nbl = nbl + 1
              End With
          Next sel
          MsgBox nbl & " lignes copiées "
      End Sub
      

      Tu sélectionnes les lignes que tu veux,sur n'importe quelle colonne, puis tu lances la macro, avec soit :
      - tu affectes un raccourci à la macro ctrl+y par exemple (alt+F8 et options)
      - tu insères un objet sur ta feuille et tu affectes la macro
      - tu fais alt+F8 et clic sur exécuter
      0
    3. Francis
       
      Ta commande marche très bien tellement bien même que je voudrais aussi me la modifier pour copier certaine ligne d'un dossier a l'autre que ce que faut je rajoute en avant du non de la feuille exemple : "suivi de mandat/feuille 1" ?
      0
    4. Francis
       
      Je veux plus dire exemple : "C:\Program Files (x86)\CaseWare\suivi de mandat/feuille1"
      0
    5. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Avec ton second classeur ouvert, tu modifies cette ligne :
              With Workbooks("Classeur2.xlsx").Sheets(ong)
      
      Tu remplaces "Classeur2.xlsx" par le nom de ton second classeur
      0