Concaténation de donné tant que cellule pas vide
Bonjour à toutes et tous,
Je me permet de venir vers vous car je rencontre un problème, et malgré Google je ne trouve pas....
Tout d'abord voici mon code :
Range("D11:D1000").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Dim i As Long
i = 11
Do
Cells(i + 1, 4).Value = Cells(i + 1, 4).Value
Cells(1, 4) = Cells(1, 4) & "-" & Cells(i + 1, 4).Value
Loop Until IsEmpty(Cells(i + 1, 4))
Ce que je veux faire :
1 - Supprimer toute les cellules vides et les remonter, soit :
Range("D11:D1000").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
2 - Concaténé le contenue de chaque cellule, jusqu’à arriver à une cellule vide et arrête, soit :
Dim i As Long
i = 11
Do
Cells(i + 1, 4).Value = Cells(i + 1, 4).Value
Cells(1, 4) = Cells(1, 4) & "-" & Cells(i + 1, 4).Value
Loop Until IsEmpty(Cells(i + 1, 4))
Le problème rencontré, c'est que la boucle ne fonctionne pas, la concaténation fonctionne, mais sans prendre en compte ma condition d'arrêt, et donc la concaténation se fait à l'infinie jusqu’à faire fixer excel.
Pouvez vous m'aider ? :D
Sportivement,
Seb
Salut,
Sportivement, je suis parvenu à ce résultat :
Option Explicit
Sub scrogneugneu()
Dim datas, strRes As String, i As Long
'PREPARATION
On Error Resume Next
With Sheets("Feuil1") ' ************ A ADAPTER : le nom de la feuille concernée **********
.Range("D11:D1000").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End With
On Error GoTo 0
'TRAITEMENT
With Sheets("Feuil1") ' ************ A ADAPTER : le nom de la feuille concernée **********
datas = .Range("D11:D1000").Value
With
For i = 1 To UBound(datas)
If datas(i, 1) = vbNullString Then Exit For
strRes = strRes & datas(i, 1) & "-"
Next
'RETOUR
MsgBox Left(strRes, Len(strRes) - 1)
End Sub
Bonjour Pijaku,
Après l'avoir intégrer à mon fichier, cela fonctionne, je te remercie.
Je rencontre un problème, ma colonne D contient "NOM Prenom" (avec espace).
Et j'ai réitéré ta solution pour effectuer le même mécanisme pour la colonne E et F.
Pour être plus claire, d'un moment à l'autre, la donné en D peut se retrouver en E et puis en F (jamais simultanément).
Et je rencontre un problème, c'est que ta solution divise Nom et Prénom.
As tu une idée d'ou ça pourrait venir ?
Sportivement,
Bonjour,
Mon code ne peut pas diviser ce qui est dans une même colonne.
Il faudrait un fichier exemple pour continuer.
Bonjour,
Voici le fichier vierge.
Les feuilles concernés :
Conseiller Forme
Analyse Contact-Prospect-Client
mdp de fermeture "seb"
Macro concerné :
Private Sub Workbook_Open() 'récupération des données pour comparaison lors de l'ouverture
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'fermeture et lancement de la macro de comparaison, de l'envoie des rapports et fermeture
Module 4 :
Sub comparaisonjour() 'comparaison des données, Macro concerné
Sub rapportquotidien() 'récupération des résultats et envoie
Sub messagefermeture() 'message de fermetureJe te remercie,
Dans les feuilles :
Conseiller Forme
Analyse Contact-Prospect-Client
Merci de mettre des données, anonymes, mais qui provoquent le mauvais comportement pour pouvoir résoudre ton problème.
Bonjour,
Les données sont mises à jour et comparer à chaque ouverture et fermeture.
Si je saisie des données maintenant elle seront comparé lors de la prochaine fermeture du fichier.
Exemple : Feuille : conseiller forme
J'ai ajouter des NOM et Prenom comme exemple.
vous pouvez ajouter un 1 dans la partie "Prospect", et fermé.
Je vais alors recevoir le Nom et Prénom des concernées en tant que contact.
En rouvrant le fichier et en plaçant un 1 dans "Histoire sportive" et fermé.
J'ai vais donc recevoir Le Nom des cocernées en tant que contact et le Prénom en tant que prospect.
Est ce claire ?
Exemple du mail que je reçoit :
n°1
"Nouveau Contact :
JEAN Jacques
GUILILI Seb
Nouveau Prospect :
Nouveau Adhérent :
seb"
Puis
n°2
Nouveau Contact :
Nouveau Prospect :
JEAN
GUILILI
HUHUHUL
JEAN
GUILILI
HUHUHUL
"Nouveau Adhérent :
Jacques
Seb
Bureau
Jacques
Seb
Bureau
seb"
Ce n'est pas très clair...
datas1 = Range("D11:D1000").Value
Re,
J'ai trouvé la solution, je tiens à t'en faire part, voici le code :
Dim datas1, datas2, datas3, cont As String, prosp As String, adh As String, i As Long
'PREPARATION
On Error Resume Next
With Sheets("Analyse Contact-Prospect-Client") ' ************ A ADAPTER : le nom de la feuille concernée **********
.Range("D11:D1000").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
.Range("E11:E1000").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
.Range("F11:F1000").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End With
On Error GoTo 0
'TRAITEMENT
With Sheets("Analyse Contact-Prospect-Client") ' ************ A ADAPTER : le nom de la feuille concernée **********
datas1 = Worksheets("Analyse Contact-Prospect-Client").Range("D11:D1000").Value
For i = 1 To UBound(datas1)
If datas1(i, 1) = vbNullString Then Exit For
cont = cont & datas1(i, 1) & Chr(10)
Next
Worksheets("Analyse Contact-Prospect-Client").Range("D1") = cont
End With
With Sheets("Analyse Contact-Prospect-Client") ' ************ A ADAPTER : le nom de la feuille concernée **********
datas2 = Worksheets("Analyse Contact-Prospect-Client").Range("E11:E1000").Value
For i = 1 To UBound(datas2)
If datas2(i, 1) = vbNullString Then Exit For
prosp = prosp & datas2(i, 1) & Chr(10)
Next
Worksheets("Analyse Contact-Prospect-Client").Range("E1") = prosp
End With
With Sheets("Analyse Contact-Prospect-Client") ' ************ A ADAPTER : le nom de la feuille concernée **********
datas3 = Worksheets("Analyse Contact-Prospect-Client").Range("F11:F1000").Value
For i = 1 To UBound(datas3)
If datas3(i, 1) = vbNullString Then Exit For
adh = adh & datas3(i, 1) & Chr(10)
Next
Worksheets("Analyse Contact-Prospect-Client").Range("F1") = adh
End With
'RETOUR
J'ai modifié ceci :
datas1 = Worksheets("Analyse Contact-Prospect-Client").Range("D11:D1000").Value
En effet, le code de base était
datas1 = Range("D11:D1000").Value
Malgré le "With" cela venait chercher le zone sur la page active ou j'étais, alors que la page "Analyse Contact-Prospect-Client" est caché.
Problème résolu et ça fonctionne à merveille !
Excellente journée