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

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

  • Classeur1_test.xlsm
    25.1 KB · Affichages: 38

job75

XLDnaute Barbatruc
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:

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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

  • Classeur1_test(1).xlsm
    30.7 KB · Affichages: 32
  • Classeur1_test(1 bis).xlsm
    30.3 KB · Affichages: 30
Dernière édition:

Discussions similaires

Réponses
40
Affichages
2 K

Statistiques des forums

Discussions
312 890
Messages
2 093 349
Membres
105 696
dernier inscrit
FrancisR