XL 2016 REMPLACER CELLULES

MONTREAL2020

XLDnaute Junior
Salut,

J'aimerais introduire une VBA qui me permet de remplacer mes cellules de la colonne (C exemple) par les cellules de la colonne (I exemple).
la condition c'est de le faire que pour les lignes dont la cellule colonne I est remplie et ce pour toute la colonne.

Je vous ai joint un fichier.

Merci pour votre aide.
 

Pièces jointes

  • REMPLACER CELLULES.xlsx
    13.4 KB · Affichages: 16

job75

XLDnaute Barbatruc
Bonsoir MONTREAL2020, sylvanu,

Avec des tableaux VBA c'est bien plus rapide s'il y a beaucoup de remplacements :
VB:
Sub Remplacer()
Dim tablo, resu(), i&
With [A1].CurrentRegion
    tablo = .Resize(, 9) 'matrice, plus rapide
    ReDim resu(1 To UBound(tablo), 1 To 1)
    resu(1, 1) = tablo(1, 3) 'en-tête
    For i = 2 To UBound(tablo)
        If tablo(i, 9) = "" Then resu(i, 1) = tablo(i, 3) Else resu(i, 1) = tablo(i, 9)
    Next
    .Cells(1, 3).Resize(UBound(resu)) = resu 'restitution
    .Columns(3).AutoFit 'ajustement largeur
End With
End Sub
A+
 

Pièces jointes

  • REMPLACER CELLULES(1).xlsm
    18.7 KB · Affichages: 8

MONTREAL2020

XLDnaute Junior
Bonsoir MONTREAL2020, sylvanu,

Avec des tableaux VBA c'est bien plus rapide s'il y a beaucoup de remplacements :
VB:
Sub Remplacer()
Dim tablo, resu(), i&
With [A1].CurrentRegion
    tablo = .Resize(, 9) 'matrice, plus rapide
    ReDim resu(1 To UBound(tablo), 1 To 1)
    resu(1, 1) = tablo(1, 3) 'en-tête
    For i = 2 To UBound(tablo)
        If tablo(i, 9) = "" Then resu(i, 1) = tablo(i, 3) Else resu(i, 1) = tablo(i, 9)
    Next
    .Cells(1, 3).Resize(UBound(resu)) = resu 'restitution
    .Columns(3).AutoFit 'ajustement largeur
End With
End Sub
A+


Bonjour job75,
J'ai quelques interrogations:
1- Est-ce qu'il y a moyen de changer la colonne de destination et la colonne source
2- Est ce possible d'effacer la cellules de la colonne source une fois l'action de remplacement est faite
3- Dois-je créer un module pour ma feuille et coller le code.
4- Affecter un bouton de commande


Merci
 

job75

XLDnaute Barbatruc
J'ai quelques interrogations:
1- Est-ce qu'il y a moyen de changer la colonne de destination et la colonne source
2- Est ce possible d'effacer la cellules de la colonne source une fois l'action de remplacement est faite
3- Dois-je créer un module pour ma feuille et coller le code.
4- Affecter un bouton de commande
1 - Bien sûr, quelles colonnes voulez-vous utiliser ?

2 - Oui, effacez toute la colonne source (9) à la fin de la macro => .Columns(9).ClearContents

3 -Pas forcément, dans mon fichier la macro est dans le code de la feuille.

4 - C'est ce que j'ai fait dans mon fichier.
 

job75

XLDnaute Barbatruc
Si le tableau commence bien en A1, colonne AM => 39, colonne AU => 47.

Comme on modifie des cellules, s'il y a une macro Worksheet_Change dans la feuille ou une macro Workbook_SheetChange dans ThisWorkbook, il faut désactiver les évènements :
VB:
Sub Remplacer()
Dim tablo, resu(), i&
With [A1].CurrentRegion 'à adapter
    tablo = .Resize(, 47) 'matrice, plus rapide
    ReDim resu(1 To UBound(tablo), 1 To 1)
    resu(1, 1) = tablo(1, 39) 'en-tête
    For i = 2 To UBound(tablo)
        If tablo(i, 47) = "" Then resu(i, 1) = tablo(i, 39) Else resu(i, 1) = tablo(i, 47)
    Next
    Application.EnableEvents = False 'désactive les évènements
    .Cells(1, 39).Resize(UBound(resu)) = resu 'restitution
    .Columns(47).ClearContents 'RAZ
    .Columns(39).AutoFit 'ajustement largeur
    Application.EnableEvents = True 'réactive les évènements
End With
End Sub
 

Statistiques des forums

Discussions
312 345
Messages
2 087 482
Membres
103 557
dernier inscrit
gerard.messerlin68@orange