Concaténer cellule en VBA avec conditions

sadness78

XLDnaute Junior
Bonjour le forum,

J'aimerais concaténer une dizaine de cellules en VBA en rajoutant une condition si la cellule est vide il ne met pas de double tiret.

Code:
Option Explicit
Sub test()

Dim liste As String
Dim a As String
Dim b As String
Dim c As String
Dim d As String
Dim e As String
Dim f As String
Dim g As String
Dim h As String
Dim i As String
Dim j As String
Dim k As String

a = Sheets("Launcher").Range("F8").Value
b = Sheets("Launcher").Range("F9").Value
c = Sheets("Launcher").Range("F10").Value
d = Sheets("Launcher").Range("F11").Value
e = Sheets("Launcher").Range("F12").Value
f = Sheets("Launcher").Range("F13").Value
g = Sheets("Launcher").Range("F14").Value
h = Sheets("Launcher").Range("F15").Value
i = Sheets("Launcher").Range("F16").Value
j = Sheets("Launcher").Range("F17").Value
k = Sheets("Launcher").Range("F18").Value


liste = a & "-" & b & "-" & c & "-" & d & "-" & e & "-" & f & "-" & g & "-" & h & "-" & i & "-" & j & "-" & k

Sheets("Attest_BDD").Range("H2:H100") = liste

End Sub

Merci d'avance de vos lumières.

Cdlt,

Sadness
 

Grand Chaman Excel

XLDnaute Impliqué
Re : Concaténer cellule en VBA avec conditions

Bonjour Sadness78,
Voici une suggestion. J'en ai profité pour simplifier ta macro:

VB:
Sub test()

Dim liste As String
Dim i As Integer

For i = 8 To 18
    If Cells(i, 6) <> "" Then liste = liste & "-" & Cells(i, 6)
Next i

liste = Mid(liste, 2)   'enlever les "-" du début
Sheets("Attest_BDD").Range("H2:H100") = liste

End Sub

A+

Edit: correction de la macro "-" au lieu de " - "
 

pierrejean

XLDnaute Barbatruc
Re : Concaténer cellule en VBA avec conditions

Bonjour sadness

A tester:

Code:
.....
liste = a & "-" & b & "-" & c & "-" & d & "-" & e & "-" & f & "-" & g & "-" & h & "-" & i & "-" & j & "-" & k
while instr(liste("--")<>0
  liste=replace(liste,"--")
wend
.......

Salut grand Chaman
 
Dernière édition:

sadness78

XLDnaute Junior
Re : Concaténer cellule en VBA avec conditions

Bonjour Grand Chaman, pierrejean, le forum

Merci pour votre aide,

@grand chaman : Merci pour cet allègement au niveau de la macro c'est vraiment appréciable. J'aimerais juste une explication sur cette partie que je ne comprend pas totalement

Code:
If Cells(i, 6) <> "" Then liste = liste & "-" & Cells(i, 6)

@pierrejean : J'ai testé aussi votre code mais il y avait un soucis à cette ligne :

Code:
while instr(liste("--")<>0

Merci encore à vous deux.

Sadness
 

sadness78

XLDnaute Junior
Re : Concaténer cellule en VBA avec conditions

Re Pierrejean,

Celà marche sans un accro. Si quelqu'un à besoin un jour je met le code avec les mises à jour de Pierrejean. Merci à lui.

Code:
Option Explicit
Sub test()

Dim liste As String
Dim a As String
Dim b As String
Dim c As String
Dim d As String
Dim e As String
Dim f As String
Dim g As String
Dim h As String
Dim i As String
Dim j As String
Dim k As String

a = Sheets("Launcher").Range("F8").Value
b = Sheets("Launcher").Range("F9").Value
c = Sheets("Launcher").Range("F10").Value
d = Sheets("Launcher").Range("F11").Value
e = Sheets("Launcher").Range("F12").Value
f = Sheets("Launcher").Range("F13").Value
g = Sheets("Launcher").Range("F14").Value
h = Sheets("Launcher").Range("F15").Value
i = Sheets("Launcher").Range("F16").Value
j = Sheets("Launcher").Range("F17").Value
k = Sheets("Launcher").Range("F18").Value


liste = a & "-" & b & "-" & c & "-" & d & "-" & e & "-" & f & "-" & g & "-" & h & "-" & i & "-" & j & "-" & k
While InStr(liste, ("--")) <> 0
  liste = Replace(liste, "--", "")
Wend


Sheets("Attest_BDD").Range("H2:H100") = liste

End Sub

2 petites questions anodines :

- le InStr est une fonction on est bien d'accord ?
- Si je voulais faire une vérification pour que la variable liste ne soit copié que si la colonne F contient une valeur, un IsEmpty est approprié ?
 

sadness78

XLDnaute Junior
Re : Concaténer cellule en VBA avec conditions

Bonjour le forum,

J'ai abandonné le isEmpty pour vérifier les 4000 lignes avec ceci mais j'ai une erreur de type incompatibilité.

Si vous avez une idée.

Code:
Sub test1()

Dim i As Integer
Dim liste As String
Dim j As Integer
Dim verif1 As String

For i = 8 To 18
    If Cells(i, 6) <> "" Then liste = liste & "-" & Cells(i, 6)
Next i

liste = Mid(liste, 2)   'enlever les "-" du début



For j = 1 To 4000

If Cells(j, 3) <> "" Then verif1 = liste

Next j

verif1 = Sheets("Attest_BDD").Range("H2")
'Sheets("Attest_BDD").Range("H2:H100") = liste

End Sub

Merci d'avance.

Sad
 

sadness78

XLDnaute Junior
Re : Concaténer cellule en VBA avec conditions

Bonjour Pierrot93

La ligne en question est celle-ci :

verif1 = Sheets("Attest_BDD").Range("H2")

Je peux me tromper étant novice en VBA mais peut être ai-je fait une erreur au niveau de déclaration de variable.

Bon après-midi.

Sad
 

Grand Chaman Excel

XLDnaute Impliqué
Re : Concaténer cellule en VBA avec conditions

Bonjour sadness78,

Pour répondre à ta question du message #4, la ligne de code fait ceci :
- on est dans une boucle qui regarde le contenu des cellules de la colonne F entre les lignes 8 et 18.
- si le contenu de la cellule de la colonne F, de la ligne i (cells(i,6)) n'est pas vide alors ajouter à la variable "liste" un "-" et le contenu de la cellule.

Code:
If Cells(i, 6) <> "" Then liste = liste & "-" & Cells(i, 6)

Bref, au lieu de concaténer le contenu de toutes les cellules et ensuite enlever les "-" en trop à cause des cellules vides, on fait la concaténation uniquement si les cellules ne sont pas vides...

Est-ce plus clair ?
 

sadness78

XLDnaute Junior
Re : Concaténer cellule en VBA avec conditions

Bonjour Grand Chaman,

Ah oui bien plus clair, je n'avais pas vu le problème comme cela ce qui soit dit en passant est bien plus intelligent, moins d'opérations de la part d'excel enfin j'ai l'impression.

Merci pour ces explications Grand chaman.

Sad

Edit pour pierrot93 :

Je suis désolé je pensais avoir joint un fichier de test au début de ce fil.
Le voici pour faciliter les échanges.
 

Pièces jointes

  • test260213.zip
    159.9 KB · Affichages: 38
Dernière édition:

sadness78

XLDnaute Junior
Re : Concaténer cellule en VBA avec conditions

Bonjour,

Suite à mon édit de la dernière fois, j'ai effectué de nombreuses recherches et j'ai trouvé ce code qui je pense répond à mon besoin mais que je n'arrive pas à adapter.
Code:
Sub donneeAvecExcel()
'Déclaration des variables
Dim xlApp As Excel.Application
Dim xlWb As Excel.Workbook
Dim xlSh As Excel.Worksheet
Dim iR As Integer
Dim iC As Integer
Dim i As Integer, j As Integer


'Affectation des données aux variables
Set xlApp = New Excel.Application
Set xlWb = xlApp.Workbooks.Open("Z:\Fichier 2.xls")
Set xlSh = xlWb.Worksheets(Attest_BDD)
'Récupération du nombre de lignes et de colonnes
iR = xlSh.UsedRange.Rows.Count
iC = xlSh.UsedRange.Columns.Count
'Boucle pour adresser les cellules contenant des données
'en excluant la première ligne qui contient les titres
For i = 2 To iR
    For j = 1 To iC
        Debug.Print xlSh.Cells(i, j)
    Next j
Next i


xlWb.Close
xlApp.Quit
Set xlSh = Nothing
Set xlWb = Nothing
Set xlApp = Nothing


End Sub
Si quelqu'un pouvait me guider.
Merci d'avance.

Cdlt,

Sadness
 

Pièces jointes

  • test050313.zip
    162.9 KB · Affichages: 35

Grand Chaman Excel

XLDnaute Impliqué
Re : Concaténer cellule en VBA avec conditions

Bonjour,
Ne faudrait-il pas que le nom de ta feuille Attest_BDD soit entre guillemets ?

Code:
Set xlSh = xlWb.Worksheets("Attest_BDD")

Pour le reste, je ne suis pas trop certain de comprendre ce que tu veux faire avec ton code...
A+
 

sadness78

XLDnaute Junior
Re : Concaténer cellule en VBA avec conditions

Bonjour Grand Chaman,

Merci pour la correction.

Je vais essayer de remettre mes neurones en ordre et d'expliquer au mieux :

A partir de l'onglet "Listes des sites", il recopie toutes les donnés sous le même format dans l'onglet "Attest_BDD" (colonne A,B,C,D)
Ensuite, sur chaque lignes remplies dans l'onglet "Attest_BDD", la macro assigne les cellules en jaunes (E3;E8;K3;K8) qui viennent de l'onglet "Launcher"

J'étais partit au départ sur des formules que je comprend mieux mais je suis arrivé avec un fichier d'une taille environ de 20Mo ce qui n'est pas très satisfaisant à mon humble avis.

Merci d'avoir déjà regardé Grand Chaman.

Sad
 

Discussions similaires

Réponses
11
Affichages
347
Réponses
1
Affichages
196

Statistiques des forums

Discussions
312 502
Messages
2 089 040
Membres
104 010
dernier inscrit
Freba