VBA avec condition => si oui copier la ligne, si non garder la même

Sandra75

XLDnaute Occasionnel
Bonsoir

J'ai un petit soucis avec un code VBA:

J'utilise une macro pour me copier de la colonne "A" chaque ligne de 1 a 300 dans une autre colonne "B", parceque les valeurs change sans arrêt.
Mais, je voudrais qu'une 2eme macro voir la même macro, garde mes valeurs de la colonne "B" si elle existe déjà dans la colonne "A" et me remplace toute les anciennes valeurs de mes cellules B qui n'existe plus dans la colonne "A" pour les remplacer par les nouvelles valeurs.

Je sais pas si c'est possible, ça m'a l'air vraiment complexe a faire.

mon code actuel:

Sub Figer()
'
' Figer Macro
'

'
Range("b1:b300").Value = Range("a1:a300").Value


End Sub
 

job75

XLDnaute Barbatruc
Re : VBA avec condition => si oui copier la ligne, si non garder la même

Bonjour Sandra75,

Ceci n'est pas du tout clair :

et me remplace toute les anciennes valeurs de mes cellules B qui n'existe plus dans la colonne "A" pour les remplacer par les nouvelles valeurs.

Quelles nouvelles valeurs ?

De toute façon le résultat c'est que les valeurs en colonne B sont celles de la colonne A.

Ce serait donc juste une question d'emplacement des valeurs en colonne B.

Il nous faudrait le fichier avec plusieurs exemples de ce que vous voulez faire.

A+
 

Sandra75

XLDnaute Occasionnel
Re : VBA avec condition => si oui copier la ligne, si non garder la même

Hello et merci pour la réponse,

En faite, cette fameuse colonne A contient des références, elle est éditée en permanence je prends juste comme exemple les 3 premières lignes:

colonne A de 1 a 3
Marque1acommandé7foi
Marque3acommandé2foi
Marque9acommandé5foi

il se trouve que la marque 3 ne commande plus, mais, nous avons un nouveau client de Marque11, elle viens de commandé 1 foi
on se retrouve donc car entre temp les marques 1 et 9 ont commandé entre temp :
Marque1acommandé9fois
Marque11acommandé1fois
Marque9acommandé8fois

Ce que je veux retrouvé en colonne B donc :
Marque1acommandé7foi
Marque11acommandé1fois
Marque9acommandé5foi

garder les anciennes commande mais introduire les nouvelles tout en effaçant celle qui n'existe plus en colonne A

c'est vraiment très complexe
 

job75

XLDnaute Barbatruc
Re : VBA avec condition => si oui copier la ligne, si non garder la même

Bonsoir Sandra75,

Merci pour vos explications, sans elles on ne pouvait strictement rien faire.

On comprend maintenant qu'il faut utiliser le mot "commandé" comme séparateur.

Voyez donc le fichier joint avec cette macro :

Code:
Sub Sauvegarde()
Dim tablo, i As Long, s, j As Variant
tablo = Range("A1:A2", Range("A" & Rows.Count).End(xlUp)) 'au moins 2 éléments
For i = 1 To UBound(tablo)
  s = Split(tablo(i, 1), "commandé")
  If UBound(s) >= 0 Then
    j = Application.Match(s(0) & "*", [B:B], 0)
    If IsNumeric(j) Then tablo(i, 1) = Range("B" & j)
  End If
Next
tablo(1, 1) = "Sauvegarde" 'si ligne de titres
[B1].Resize(UBound(tablo)) = tablo
Range("B" & i & ":B" & Rows.Count).ClearContents
End Sub
Bonne nuit et A+
 

Pièces jointes

  • Sauvegarde(1).xls
    42.5 KB · Affichages: 52
  • Sauvegarde(1).xls
    42.5 KB · Affichages: 60
  • Sauvegarde(1).xls
    42.5 KB · Affichages: 59

job75

XLDnaute Barbatruc
Re : VBA avec condition => si oui copier la ligne, si non garder la même

Bonjour Sandra75, le forum,

Sur 300 lignes la macro s'exécute en 1/10ème de seconde environ sur Win7 - Excel 2010.

On peut donc sans problème mettre le code dans une macro Worksheet_Change :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A:A]) Is Nothing Then Exit Sub
Dim tablo, i As Long, s, j As Variant
tablo = Range("A1:A2", Range("A" & Rows.Count).End(xlUp)) 'au moins 2 éléments
For i = 1 To UBound(tablo)
  s = Split(tablo(i, 1), "commandé")
  If UBound(s) >= 0 Then
    j = Application.Match(s(0) & "*", [B:B], 0)
    If IsNumeric(j) Then tablo(i, 1) = Range("B" & j)
  End If
Next
tablo(1, 1) = "Sauvegarde" 'si ligne de titres
[B1].Resize(UBound(tablo)) = tablo
Range("B" & i & ":B" & Rows.Count).ClearContents
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Sauvegarde(2).xls
    54.5 KB · Affichages: 59
  • Sauvegarde(2).xls
    54.5 KB · Affichages: 65
  • Sauvegarde(2).xls
    54.5 KB · Affichages: 64

Sandra75

XLDnaute Occasionnel
Re : VBA avec condition => si oui copier la ligne, si non garder la même

Re Bonjour

Je viens d'ouvrir mon fichier pour incorporer le code mais le soucis c'est que c'est pas sur une seule colonne que contiens mes données mais sur 2 colonnes :

Comment changer le code svp ?

les données colonnes A1 :
Marque1 a commandé "puis colonne B1" 9 fois

Faudrait que je ca puisse ce mettre à jour sur 2 colonnes du coup genre la sauvegarde en "E" et "F"

Merci bien
 

job75

XLDnaute Barbatruc
Re : VBA avec condition => si oui copier la ligne, si non garder la même

Bonjour sandra75,

Voyez le fichier (3) avec cette nouvelle macro :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A:B]) Is Nothing Then Exit Sub
Dim tablo, i As Long, j As Variant
tablo = Range("A1:B" & Range("A" & Rows.Count).End(xlUp).Row)
For i = 1 To UBound(tablo)
  j = Application.Match(tablo(i, 1), [E:E], 0)
  If IsNumeric(j) Then _
    If Range("F" & j) <> "" Then tablo(i, 2) = Range("F" & j)
Next
tablo(1, 1) = "Sauvegarde" 'si ligne de titres
[E1:F1].Resize(UBound(tablo)) = tablo
Range("E" & i & ":F" & Rows.Count).ClearContents
End Sub
A+
 

Pièces jointes

  • Sauvegarde(3).xls
    57.5 KB · Affichages: 51
  • Sauvegarde(3).xls
    57.5 KB · Affichages: 63
  • Sauvegarde(3).xls
    57.5 KB · Affichages: 57
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 279
Messages
2 086 728
Membres
103 380
dernier inscrit
prolofief