Commande vba

Fermé
Francis - 24 janv. 2013 à 17:47
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 26 janv. 2013 à 09:46
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

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 704
24 janv. 2013 à 18:15
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
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
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 704
24 janv. 2013 à 21:22
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
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
Je veux plus dire exemple : "C:\Program Files (x86)\CaseWare\suivi de mandat/feuille1"
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 704
24 janv. 2013 à 22:29
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