IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

selectionner plusieurs lignes


Sujet :

Macros et VBA Excel

  1. #21
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Pourtant, c'est le même code que celui de ton message du 22 à 22h29, non?
    Tu as changé quelque chose?

    PGZ

  2. #22
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    non, je l'ai copier coller tel quel juste derrière then

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    For i = 0 To boxreliquat.ListCount - 1
        If boxreliquat.Selected(i) = True Then
            'chercher dans TableauCommandes le nom boxreliquat.List(i). On considère qu'il peut se trouver sur plusieurs lignes
            vC() = Application.Evaluate("TableauCommandes").Value
            'comme les tableaux commencent en ligne1 et pas de titre = pas de décalage entre indice et num ligne
            'on commence à la fin pour ne pas introduire de décalage
            For L = UBound(vC, 1) To 1 Step -1
                If vC(L, 1) = boxreliquat(i) Then boxreliquat.List (i)
                'en ligne
                lCopie = Application.Evaluate("TableauFactures").Rows.Count + 1
                'il faut copier la ligne L
                shC.Range(shC.Cells(L, 1), shC.Cells(L, 14)).Copy shF.Range(shF.Cells(lCopie, 1), shF.Cells(lCopie, 14))
                'et l'effacer
                shC.Rows(L).Delete
                End If
            Next L
        End If
    Next i

  3. #23
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    D'où l'erreur.
    La ligne s'écrit ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If vC(L, 1) = boxreliquat.List(i) Then
                    'en ligne
    OK? Ca dit quoi?

    PGZ

  4. #24
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    erreur corigé

    nouvel erreur
    erreur d'execution 424
    objet requis
    focus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     lCopie = Application.Evaluate("TableauFactures").Rows.Count + 1

  5. #25
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Dans la feuille Prepafact, le tableau doit avoir au moins 1 ligne, ne serait-ce que la ligne de titres.
    En plus, si la listbox est directement alimentée par les valeurs du tableau de la feuille commandeelectro, alors il faut mémoriser la liste avant de modifier la plage en question.
    LE code devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub subBosk()
    Dim i As Integer
    Dim vC() As Variant
    Dim L As Long, lCopie As Long
    Dim shC As Excel.Worksheet, shF As Excel.Worksheet
    Dim sListe() As String, bSelection() As Boolean
     
    Set shC = Application.ThisWorkbook.Worksheets("commandeelectro")
    Set shF = Application.ThisWorkbook.Worksheets("prepafact")
    Application.ScreenUpdating = False
     
    'mémorisation de la liste avant modication de la plage source de liste
    ReDim sListe(0 To boxreliquat.ListCount - 1)
    ReDim bSelection(0 To boxreliquat.ListCount - 1)
     
    For i = 0 To boxreliquat.ListCount - 1
        sListe(i) = boxreliquat.List(i)
        bSelection(i) = boxreliquat.Selected(i)
    Next i
     
    For i = UBound(sListe) To 0 Step -1
        If bSelection(i) = True Then
            'chercher dans TableauCommandes (nom de plage)le nom boxreliquat.List(i). On considère qu'il peut se trouver sur plusieurs lignes
            vC() = Application.Evaluate("TableauCommandes").Value
            'comme les tableaux commencent en ligne1 et pas de titre = pas de décalage entre indice et num ligne
            'on commence à la fin pour ne pas introduire de décalage
            For L = UBound(vC, 1) To 1 Step -1
                If vC(L, 1) = sListe(i) Then
                'en ligne (TableauFactures = nom de plage)
                lCopie = Application.Evaluate("TableauFactures").Rows.Count + 1
                'il faut copier la ligne L
                shC.Range(shC.Cells(L, 1), shC.Cells(L, 14)).Copy shF.Cells(lCopie, 1)
                'et l'effacer
                shC.Rows(L).Delete
                End If
            Next L
        End If
    Next i
     
    'libération mémoire
    Set shC = Nothing
    Set shF = Nothing
    Erase vC
    Erase sListe
    Erase bSelection
     
    Application.ScreenUpdating = True
     
    End Sub
    Testé cette fois.

    Cordialement,
    PGZ

    PGZ

  6. #26
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    super

    j'adore ta technique

    ça fonctionne

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Selectionner plusieurs lignes dans une Grille
    Par KuBi4K dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 16/11/2009, 11h06
  2. [XL-2000] Selectionner plusieurs lignes
    Par s.echeff dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/04/2009, 11h09
  3. Réponses: 2
    Dernier message: 26/08/2008, 15h48
  4. [VBA-E] comment selectionner plusieurs lignes
    Par Annick.w dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/01/2007, 20h15
  5. comment savoir si on a selectionne plusieurs lignes? LISTBOX
    Par nath-0-0 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/03/2006, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo