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 SubJ'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 HOSTNAMEEn 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 SubH2so4 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).Copyen 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