Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Ajouter caractère dans plusieurs colonnes en fonction d'une condition

  • Initiateur de la discussion Initiateur de la discussion Elodie195
  • Date de début Date de début

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 !

Elodie195

XLDnaute Occasionnel
Bonjour,

Je sollicite votre aide concernant une macro Excel.

J'ai un tableau avec des colonnes qui vont de A à AF.

La colonne qui nous intéresse est la C avec les 3 résultats en rouge.
Lorsque dans la colonne C, nous avons la valeur EI présente, je souhaiterais que la macro écrive également EI à la suite du résultat dans les colonnes H, J, L, R, S, V.

Merci de votre aide.

Bonne journée.
 

Pièces jointes

Bonjour Elodie195,

Exécutez cette macro :
Code:
Sub EI()
Dim t, i&
Application.ScreenUpdating = False
With Feuil1.[A1].CurrentRegion.Resize(, 22) 'colonnes A:V
  With Intersect(.Cells, Feuil1.[H:H,J:J,L:L,R:S,V:V])
    .Replace ",", Chr(130), xlPart 'remplacement de la virgule
    .Replace "EI", "" 'RAZ
    .Replace Chr(130), "." 'restitution du séparateur décimal
  End With
  t = .Value 'matrice, plus rapide
  For i = 2 To UBound(t)
    If Right(t(i, 3), 2) = "EI" Then
      t(i, 8) = t(i, 8) & "EI": t(i, 10) = t(i, 10) & "EI"
      t(i, 12) = t(i, 12) & "EI": t(i, 18) = t(i, 18) & "EI"
      t(i, 19) = t(i, 19) & "EI": t(i, 22) = t(i, 22) & "EI"
    End If
  Next
  .Value = t 'restitution
End With
End Sub
Feuil1 est le CodeName (pas le nom) de la feuille à traiter, adapter au besoin.

Edit : pour tester j'ai copié le tableau sur 60 000 lignes.

Chez moi sur Win 10 - Excel 2013 la macro s'exécute en 6,3 secondes.

A+
 
Dernière édition:
Re,

Deux questions importantes qui peuvent nécessiter une autre solution :

- en colonne C peut-on avoir à ajouter ou supprimer manuellement les "EI" ?

- quel est le nombre maximum de lignes que le tableau peut atteindre ?

A+
 
Bonjour Elodie195, le forum,

Si les cellules en colonne C peuvent être modifiées manuellement on peut utiliser :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, t, i&
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With [A1].CurrentRegion.Resize(, 22) 'colonnes A:V
  Set P = Intersect(Target.EntireRow, .Cells)
  With Intersect(P, [D:F,H:H,J:J,L:L,R:S,V:V])
    .Replace ",", Chr(130), xlPart 'remplacement de la virgule
    .Replace "EI", "" 'RAZ
    .Replace Chr(130), "." 'restitution du séparateur décimal
  End With
  For Each P In P.Areas 'si entrées multiples (copier-coller ou effacement)
    t = P 'matrice, plus rapide
    For i = 1 To UBound(t)
      If Right(t(i, 3), 2) = "EI" Then
        t(i, 4) = t(i, 4) & "EI": t(i, 5) = t(i, 5) & "EI": t(i, 6) = t(i, 6) & "EI"
        t(i, 8) = t(i, 8) & "EI": t(i, 10) = t(i, 10) & "EI": t(i, 12) = t(i, 12) & "EI"
        t(i, 18) = t(i, 18) & "EI": t(i, 19) = t(i, 19) & "EI": t(i, 22) = t(i, 22) & "EI"
      End If
    Next i
    P = t 'restitution
  Next P
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
J'ai ajouté les colonnes D E F dans les plages à modifier, ça paraît logique.

Fichier joint, pour tester validez ou modifiez les cellules en colonne C.

Notez qu'on ne peut pas modifier manuellement les "EI" dans les colonnes listées.

Edit : si l'on veut imposer les majuscules "EI" en colonne C il suffit d'ajouter :
Code:
  P.Columns(3).Replace "EI", "EI", xlPart 'impose les majuscules "EI" en colonne C
Fichier (1 bis).

A+
 

Pièces jointes

Dernière édition:
- 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
5
Affichages
212
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…