Copie VBA de données triées
Bonjour à tous,
Je suis nouveau sur le forum et donc je vais faire de mon mieux pour être clair dans ma question (je précise d'entrée que je n'ai pas trouvé de réponse dans les questions déjà posées)
Alors :
J'ai composé une liste Excel qui reprend l'ensemble des agents d'une entreprise (256) , cette liste comporte 17 champs différents et entre autre les champs "Mail Pro" et "Mail Perso"
Mon but est de pouvoir faire du tri sur l'ensemble des champs et ensuite de copier successivement les adresses mails, d'en créer une chaîne de caractères avec des ";" (points virgule) entre chaque adresse et d'envoyer le tout dans le presse-papier.
Aujourd'hui tout cela fonctionne bien à condition que je ne fasse aucun triage (liste complète), mais dès que je fais un tri (visible à l'écran) mon code passe en revue malgré tout les cellules non sélectionnées.
Ma question est la suivante : comment faire pour que le code ne s'arrête que sur les cellules triées et pas sur les autres ?
Je copie ci-dessous le code utilisé :
Private Sub Bt_CopyMailsPerso_Click()
Dim MSForm As Object
Dim presse_papier As String
Range("K8").Select
Do While Not ActiveCell = ""
presse_papier = presse_papier & ActiveCell.Value & ";"
ActiveCell.Offset(1, 0).Select
Loop
Set MSForm = New DataObject
MSForm.SetText (presse_papier)
MSForm.PutInClipboard
Set MSForm = Nothing
End Sub
Déjà merci pour votre temps et aussi pour votre aide
Bonjour,
voici un exemple si votre liste est sous forme de Tableau,
Sub test()
With ActiveSheet.ListObjects("Tableau1")
Set Valeur_visibles = .ListColumns(2).DataBodyRange.SpecialCells(xlCellTypeVisible)
For Each v In Valeur_visibles
Debug.Print v
Next
End With
End Sub
Bonjour et merci i20100 pour votre aide !
J'aurais besoin de deux infos pour essayer votre proposition :
- Dans l'exemple, est-ce que "Tableau1" doit être une plage nommée qui reprend toutes les données de la colonne triée ? (K dans mon cas) ?
- Est-ce que "Valeur_visibles" est une variable que je dois définir comme String ?
Si j'exécute le code tel que proposé cela provoque une erreur d'exécution '9' "L'indice n'appartient pas à la sélection", j'ai tenté de comprendre l'aide de Microsoft mais vous aurez compris que je ne suis pas un kador Excel ...
Merci encore pour votre aide
- Dans l'exemple, est-ce que "Tableau1" doit être une plage nommée qui reprend toutes les données de la colonne triée ? (K dans mon cas) ?
pour transformer la plage de cellule en tableau, sélectionne les cellules de la plage,
et sélectionne au menu, Insertion, Tabeau
- Est-ce que "Valeur_visibles" est une variable que je dois définir comme String ?
non,
Dim Valeur_visibles As Range, vv As Range
Encore merci i20100 pour votre aide,
J'ai mis un peu de temps pour mettre tout ça en forme mais ça fonctionne !
Il me reste un dernier détail à régler :
J'ai actuellement +/- 300 agents dans mon tableau mais pou pouvoir faire évoluer ma liste j'ai défini mon tableau sur 400 lignes
Du coup le code
For Each v In Valeur_visibles
parcourt une centaine de lignes vides, comment faire pour s'arrêter dès qu'une valeur est égale à "" ?
J'ai essayé avec activecell.value mais ça ne fonctionne pas
Voilà où j'en suis ...
Dim Valeur_visibles As Range, v As Range
Dim MSForm As Object
Dim presse_papier As String
With ActiveSheet.ListObjects("Tableau1")
Set Valeur_visibles = .ListColumns(10).DataBodyRange.SpecialCells(xlCellTypeVisible)
For Each v In Valeur_visibles
presse_papier = presse_papier & v & ";"
Next
End With
'alimentation du presse-papier
Set MSForm = New DataObject
MSForm.SetText (presse_papier)
MSForm.PutInClipboard
Set MSForm = Nothing
MsgBox "Les mails PRO sont maintenant copiés dans le presse-papier" & vbCrLf & vbCrLf _
& "Il reste à les coller dans la zone 'A' du mail", vbInformation, "Information"
Merci encore de votre temps ...
Okaaay ! et bien tous mes problèmes sont résolus
Un super grand merci