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))
capture

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 fermeture

Je 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

Rechercher des sujets similaires à "concatenation donne tant que pas vide"