VBA - Concatener - Ignorer cellule vide

Bonjour à tous,

En premier lieu, merci d’avance de l’aide que vous pourrez m’apporter concernant ce projet.

Débutante dans VBA, j’aimerais faire appel à vous pour améliorer un fichier d’adresse de contact que j’ai réalisé dans le cadre de mon travail.

Ma situation est la suivante :

Via un une query SQL j’obtiens de notre ERP plusieurs adresses concernant les envois de marchandises – j’utilise ensuite quelques macro VBA pour changer la présentation de ces adresses. Le but étant de :

  • concatener des adresses avec saut de lignes,
  • supprimer les colonnes inutiles,
  • faire la mise en page couleur et renommer les titres des colonnes

Là ou je bloque, c’est que je souhaiterais que lorsqu’une cellule est vide, la fonction concatener soit ignorée (et donc ne pas avoir de saut de ligne pour rien).

Avoir ce résultat :

Final Destination Address

ALBANIA

Au lieu de ce résultat :

Final Destination Address

J’ai mis en pièce jointe le fichier complet avec toutes les macro que j’ai intégrées au fichier, je cherche simplement à supprimer ces sauts de ligne inutile mais toute amélioration est la bienvenue ! (J’imagine que mes lignes de codes ne sont pas des plus propres).

Merci d’avance et excellente journée à tous,

Laetitia Bailly.

Bonjour,

C'est le travail d'une condition

if (condition) then
    'code si vrai
else
    'code si faux
end if

ton fichier en retour, j'ai pas spécialement fait attention aux concaténation, je te laisse vérifier.

Bonjour,

J'ai pas tout compris au fichier, mais pour la concaténation, il faudrait se soucier de savoir si la valeur à concatener existe et auquel cas ajouter le retour à la ligne.

Je crois que ça donne ça au niveau de la macro :

For i = 9 To lRow
    For j = 7 To 14
    If Cells(i, j) <> "" Then
    Cells(i, 6) = Cells(i, 6) & vbCrLf & Cells(i, j)
    End If
    Next j
Next i
For i = 9 To lRow
    For j = 16 To 21
    If Cells(i, j) <> "" Then
    Cells(i, 7) = Cells(i, 7) & vbCrLf & Cells(i, j)
    End If
    If Cells(i, 22) <> "" Then
    Cells(i, 7) = Cells(i, 7) & " " & Cells(i, 22)
    End If
    If Cells(i, 1) <> "" Then
    Cells(i, 7) = Cells(i, 7) & " " & Cells(i, 1)
    End If
    Next j
Next i

Bon courage pour la suite. En fait j'avais ouvert pour voir ce qu'étais le QUERY SQL, mais j'ai pas trouvé.

Bonjour Colibri76,

Merci beaucoup pour ta réponse.

J'ai en effet enlevé le statement SQL du fichier.

J'ai essayé d'adapter ta réponse au fichier mais je n'y arrive que partiellement.

Pour une raison que j'ignore la concatenation dans la deuxième colonne ignore plusieurs colonnes (les colonnes de Q à U).

La concaténation marche parfaitement pour la première adresse et j'avoue ne pas comprendre l'erreur...

J'ai remis à jour le fichier et n'ai gardé que le code VBA concernant la concaténation.

Zarik, j'ai également essayé de travailler à partir de ton ficher mais là aussi je n'arrive pas au résultat voulu et je tourne en rond...

Encore merci pour votre aide !!

Bonne après-midi et bon weekend !

Laetitia

Bonjour,

Effectivement, le "Next J" de la 2ème boucle doit remonter au dessous du premier end if.

For i = 9 To lRow
    For j = 16 To 21
    If Cells(i, j) <> "" Then
    Cells(i, 7) = Cells(i, 7) & vbCrLf & Cells(i, j)
    End If
    Next J

Bon week-end

Bonjour,

Alors j'ai essayé en positionnant le 'Next j' à différent endroits et la raison pour laquelle la macro ne fonctionnait pas c'est principalement parce que les cellules que j'essayais de concatener n'étaient pas consécutives.

Bon j'ai finalement compris comment écrire mon code et je partage avec vous la version finale.

La macro que je partage inclus également le code que j'utilise pour rafraîchir ma query SQL ainsi que la mise en page (suppression des colonnes inutiles, colonnes renommées, autofit des cellules, un peu de couleur, etc).

Merci encore à tous pour votre aide !!

Bon weekend !

Laetitia.

Bonjour,

Merci, je vais devoir regarder maintenant...

Rechercher des sujets similaires à "vba concatener ignorer vide"