Macro pour concatener en colonne F, le texte colonne F et le texte G si...

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Christian0258

XLDnaute Accro
Bonsoir à tout le forum,

Je souhaiterais votre aide afin d'écrire une macro pour concatener, en colonne F, le texte de cette colonne F et celui de la colonne G si en colonne G ...

voir fichier...

Merci pour le temps que vous voudrez bien m'accorder.

Bien amicalement,
Christian
 

Pièces jointes

Dernière édition:
Re : Macro pour concatener en colonne F, le texte colonne F et le texte G si...

Bonjour,

Tu peux tester ceci, voire si cela te convient :

VB:
Sub goZyva()
Dim c As Range, d As Range 'Variables utilisées
For Each c In Range("G2:G" & Range("F65000").End(xlUp).Row) 'On scanne chaque cellule de la colonne G
    If c <> "" Then 'si elle est pas vide
        Set d = Range("I2:I8").Find(c)
        If Not d Is Nothing Then 'et qu'elle contient une valeur du tableau placé en I2:I8
            If Right$(c(1, 0), Len(d)) <> d Then  'et qu'elle ne termine pas déjà par ce qu'il y a en colonne G
              c(1, 0) = c(1, 0) & " " & c ' Concaténation des 2 textes
              c(1, 0).Characters(Start:=Len(c(1, 0)) - Len(d) + 1, Length:=Len(d)).Font.ColorIndex = 3 'Copie de la fin de la cellule en rouge
            End If
        End If
    End If
Next c
End Sub

ton fichier joint :
 

Pièces jointes

Re : Macro pour concatener en colonne F, le texte colonne F et le texte G si...

Bonsoir Christian, Softmama,

Noter qu'on peut utiliser cette formule en H2, à tirer vers le bas :

Code:
=F2&SI(NB.SI(pesées;G2);" "&INDEX(pesées;EQUIV(G2;pesées;0));"")
On peut faire une macro qui reproduit exactement cette opération.

A+
 
Re : Macro pour concatener en colonne F, le texte colonne F et le texte G si...

re, bonsoir job75,

Le souci de la formule est qu'elle ne conserve pas le formatage en rouge comme dans l'exemple. J'ignore si c'est un critère important ou non, c'est pkoi, j'ai préféré faire une macro. Mais du coup, pkoi ne pas faire plutôt cette formule là :

Code:
=F2&SI(NB.SI(pesées;G2);" "&G2;"")

?
 
Dernière édition:
Re : Macro pour concatener en colonne F, le texte colonne F et le texte G si...

Re Softmama,

Tu as parfaitement raison, qu'ai-je donc été chercher 😕

Par contre il faut compléter la formule si la colonne F a été déjà modifiée :

Code:
=F2&SI(ESTNUM(CHERCHE(G2;F2));"";SI(NB.SI(pesées;G2);" "&G2;""))
La macro que j'imagine entrera cette formule en colonne H, copiera cette colonne et collera les valeurs en colonne F.

Enfin effacera la colonne H.

A+
 
Re : Macro pour concatener en colonne F, le texte colonne F et le texte G si...

Bonjour Christian, Softmama, le forum,

Voici la macro utilisant la formule indiquée :

Code:
Sub Complete()
Application.ScreenUpdating = False
With Range("H2:H" & [F65536].End(xlUp).Row)
  .FormulaR1C1 = "=RC6&IF(ISNUMBER(SEARCH(RC7,RC6)),"""",IF(COUNTIF(pesées,RC7),"" ""&RC7,""""))"
  .Offset(, -2) = .Value
  .ClearContents
End With
End Sub
A+
 
Re : Macro pour concatener en colonne F, le texte colonne F et le texte G si...

Re,

Si, comme le fait Softmama, on veut colorer le texte ajouté, on peut introduire le caractère de code 160 (espace insécable) pour faciliter le repérage.

Ensuite bien sûr passer en revue les cellules :

Code:
Sub Complete()
Dim cel As Range, p As Byte
Application.ScreenUpdating = False
With Range("H2:H" & [F65536].End(xlUp).Row)
  .FormulaR1C1 = "=RC6&IF(ISNUMBER(SEARCH(RC7,RC6)),"""",IF(COUNTIF(pesées,RC7),""" & Chr(160) & """&RC7,""""))"
  .Offset(, -2) = .Value
  .ClearContents
  For Each cel In .Offset(, -2)
    p = InStr(cel, Chr(160))
    If p Then cel.Characters(p).Font.ColorIndex = 3
  Next
End With
End Sub
A+
 
Dernière édition:
Re : Macro pour concatener en colonne F, le texte colonne F et le texte G si...

Re, le forum,
Je remercie, infiniment, Softmama et job75, pour leur travail impeccable.

Je souhaiterais apporter un ajoût à cette macro : lorsque la macro trouve et concatène, quelle modifie sur la ligne traitée, le texte en col D.

J'ai mis à jour dans mon premier poste le fichier v02 avec la modif attendue.

Je vous remercie pour votre aide si précieuse.
Bien à vous,
Christian
 
Re : Macro pour concatener en colonne F, le texte colonne F et le texte G si...

Bonjour,

Dans la macro que j'ai faite, il suffit de rajouter cette ligne vers la fin :
VB:
c(1, -3) = "PESEE"

ce qui donne la macro ainsi :

VB:
Sub goZyva() ' Softmama
Dim c As Range, d As Range 'Variables utilisées
For Each c In Range("G2:G" & Range("F65000").End(xlUp).Row) 'On scanne chaque cellule de la colonne G
   If c <> "" Then 'si elle est pas vide
       Set d = Range("I2:I8").Find(c)
        If Not d Is Nothing Then 'et qu'elle contient une valeur du tableau placé en I2:I8
           If Right$(c(1, 0), Len(d)) <> d Then  'et qu'elle ne termine pas déjà par ce qu'il y a en colonne G
             c(1, 0) = c(1, 0) & " " & c ' Concaténation des 2 textes
             c(1, 0).Characters(Start:=Len(c(1, 0)) - Len(d) + 1, Length:=Len(d)).Font.ColorIndex = 3 'Copie de la fin de la cellule en rouge
             c(1, -3) = "PESEE"
           End If
        End If
    End If
Next c
End Sub
 
Re : Macro pour concatener en colonne F, le texte colonne F et le texte G si...

Bonsoir Christian, Softmama,

Avec ma macro, on peut soit utiliser le balayage des cellules, soit comme ici entrer en colonne H une 2ème formule :

Code:
Sub Complete() ' job75
Dim ref As Range, p As Byte
Application.ScreenUpdating = False
On Error Resume Next
With Range("H2:H" & [F65536].End(xlUp).Row)
  .FormulaR1C1 = "=RC6&IF(ISNUMBER(SEARCH(RC7,RC6)),"""",IF(COUNTIF(pesées,RC7),""" & Chr(160) & """&RC7,""""))"
  .Offset(, -2) = .Value
  .FormulaR1C1 = "=1/ISNUMBER(SEARCH(RC7,RC6))/COUNTIF(pesées,RC7)"
  Set ref = .SpecialCells(xlCellTypeFormulas, 1) 'plage des formules donnant un résultat numérique
  ref.Offset(, -1) = "PESÉE"
  .ClearContents
  '---FACULTATIF---
  For Each ref In .Offset(, -2)
    p = InStr(ref, Chr(160))
    If p Then ref.Characters(p).Font.ColorIndex = 3
  Next
  '----------------
End With
End Sub
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
240
Réponses
13
Affichages
370
Retour