Selection de plusieurs lignes via plusieurs cellules

Bonjour à tous et à toutes !

Je bloque sur un problème qui me paraît pourtant trsè simple et j'ai recherché sur le forum avant mais sans succès.

Use Case :

1) l'utilisateur selectionne manuellement des CELLULES d'une colonne (B) d'un tableau sur une PREMIERE FEUILLE de mon classeur

c'est maintenant que les choses se corsent

2)Ensuite il CLIQUE sur un BOUTON et cela doit COPIER (sur une autre feuille avec le meme tableau et les même en-tetes ) toutes la/les lignes de/des cellules séléctionnés de la colonne B à la colonne AH (mon tableau va jusqu'à la colonne AS) pour toute les cellules selectionnées par l'utilisateur en colonne B avant le clique sur le bouton

Avancement

grace à ce code

     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     '                   Auteur : Mehdi                                    Version : 1.0  Date :  novembre/decembre 2015               '
     '                                                                                                        '
     'Macro permettant de copier les lignes de la feuille "ListeGMGEMFR" sur la feuille commande via le bouton'
     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     '                                      MANUEL D'UTILISATION                                                         '                                                '
     '     1) Sur la feuille "ListeGMGEMFR" selectionner une ou plusieurs CELLULES de la colonne B UNIQUEMENT            '
     '     2) Puis cliquer sur le bouton pour que toute la ligne de la(des) cellule(s) séléctionnée(s) soit copié sur    '
     '             la feuille "commande"                                                                                 '
     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Option Explicit
Sub Capture_Saisie()

      Dim Lig As Long ' on declare la première ligne a tester

      ActiveCell.Resize(, 33).Copy 'selection de la colonne jusqu'à AH DEPUIS LA COLONNE HOSTNAME

      thisworkbook.Worksheets("commandes").Select 'selection et redirection sur la 2ème feuille

     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     'recherche de la première ligne vide de la feuille pour insérer les données au bon endroit '
     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

      thisworkbook.Worksheets("commandes").Range("test").Select 'on se place sur la premiere ligne du tableau de la feuille commandes en B2 (zone nom : test) et devient la cellule active

        Do While Not (IsEmpty(ActiveCell)) ' on boucle sur cette cellule active pour savoir si elle est vide

        Selection.Offset(1, 0).Select 'si elle est rempli => on passe à la ligne suivante

        Loop

      Selection.PasteSpecial    ' quand on est sur d'avoir trouvé la première cellule vide on colle la selection

End Sub

J'arrive à faire tout ce que je souhaite sauf a SELECTIONNER TOUTES LES LIGNES (de B à AH) DES CELLULES SELECTIONNER AVANT LE CLIQUE SUR LE BOUTON (cellule en colonne B). Actuellement avec ce code, ca fonctionne très bien sauf que je peux uniquement copier une seule ligne même si je selectionne plusieurs cellules au départ.

le problème vient de cette instruction:

ActiveCell.Resize(, 33).Copy 'selection de la colonne jusqu'à AH DEPUIS LA COLONNE HOSTNAME

En effet il utilise la cellule active (donc ce que l'utilisateur a selectionner en B) jusqu' a la colonne 33 donc AH et fait la selection...malheureusement ce code ne prend pas en compte quand l'utilisateur selectionne plusieurs cellules en colonne B au début.

il me copie sur ma deuxième feuille que la ligne de la cellule active et moi je veux copier le slignes des cellules selectionnées.

J'espère avoir été clair.

Merci à tout ceux qui se pencheront sur le problème. Je peux fournir le fichier de reference sau besoin

Mehdi

bonjour,

à tester

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     '                   Auteur : Mehdi                                    Version : 1.0  Date :  novembre/decembre 2015               '
     '                                                                                                        '
     'Macro permettant de copier les lignes de la feuille "ListeGMGEMFR" sur la feuille commande via le bouton'
     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     '                                      MANUEL D'UTILISATION                                                         '                                                '
     '     1) Sur la feuille "ListeGMGEMFR" selectionner une ou plusieurs CELLULES de la colonne B UNIQUEMENT            '
     '     2) Puis cliquer sur le bouton pour que toute la ligne de la(des) cellule(s) séléctionnée(s) soit copié sur    '
     '             la feuille "commande"                                                                                 '
     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Option Explicit
Sub Capture_Saisie()

      Dim Lig As Long ' on declare la première ligne a tester

      For Each r In Selection.Rows

      r.Cells(1, 1).Resize(, 33).Copy 'selection de la colonne jusqu'à AH DEPUIS LA COLONNE HOSTNAME

      ThisWorkbook.Worksheets("commandes").Select 'selection et redirection sur la 2ème feuille

     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     'recherche de la première ligne vide de la feuille pour insérer les données au bon endroit '
     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

      ThisWorkbook.Worksheets("commandes").Range("test").Select 'on se place sur la premiere ligne du tableau de la feuille commandes en B2 (zone nom : test) et devient la cellule active

        Do While Not (IsEmpty(ActiveCell)) ' on boucle sur cette cellule active pour savoir si elle est vide

        Selection.Offset(1, 0).Select 'si elle est rempli => on passe à la ligne suivante

        Loop

      Selection.PasteSpecial    ' quand on est sur d'avoir trouvé la première cellule vide on colle la selection

     Next

End Sub

H2so4 Merci pour ta reponse super rapide. En jettant un coup d oeil a ton code ca me parait pas mal et logique.

Je serai de retour au bureau lundi pour tester et je te ferai un feedback si c est good ou si y a qques choses a ameliorer.

d'ici la merci encore et je vous souhaite de belles fetes de fin d annees

Mehdi

Merci beaucoup h2so4 ca marche parfaitement ! y fallait juste que j'ajoute l'instruction

Dim r As Variant ' on declare la variable de boucle (permet de parcourir les cellules séléctionée par l'user)

pour que le code soit fonctionnel.

Donc c'est très bien et je souhaiterais également que si quelqu'un séléctionne des autres cellules que des cellules de la colonne B (en premiere feuille). un message d'erreur lui soit notifié et lui demande de slectionner que des cellule de la colonne B ou alor que mon code permettent à l'user de selectionner n'împorte qu'elle cellule et que la ligne soit copiée également toujours en colonne .

Avec mon code actuel l'user peut/doit selectionner uniquement les cellules de la colonne B (de la prmière feuille) pour que la copie sur la deuxième feuille respecte le format de la première feuille.

EX: quand je selectionne des cellules de la colonne B = aucuns soucis , la copie des cellules se fait bien

quand je selectionne des cellules pas en colonne B = la copie commence depuis la cellule active alor que je veux qu'elle se fasse depuis B peu importe les cellules selectionnées ou active

le problème vient du fait,

[b]r.Cells(1, 1).[/b]Resize(, 33).Copy

en effet, il conditionne ma selection

J'espère avoir été clair.

merci à tous

EDIT :

je m'auto répond ,

pour arriver à ce que je voulais j'ai rajouté

   s = Selection.Address(True, True, xlA1) ' recupère l'adresse de la selection (ex: renvoi $B$2 pour la colonne B2) en vue du traitement de l'erreur

         If Not s Like "$B$*" Then ' test si les cellules selectionnées se trouvent bien en colonne "B" avec la variable "s" , si non =erreur, si oui on continue le traitement

            GoTo errorHandler

         Else 'sinon c'est en colonne "B", on execute la suite du traitement
    

et ceci à la fin

Exit Sub

errorHandler:
    'Gestionnaire d'erreurs
    MsgBox ("Vous pouvez uniquement selectionner des cellules de la colonne B")

ce qui me permet maintenant d'obéliger l'user a selectionner des cellules de la colonne B sinon ça nous renvoi un MSG d'erreur avec l'action correct à faire.

Je reviendrais vers vous pour des détails de finalisations.

Merci

Mehdi

Rechercher des sujets similaires à "selection lignes via"