Office 365 COPIER COLLER AVEC CONDITIONS

ABDELHAK

XLDnaute Occasionnel
Bonjour le forum

Je sollicite votre aide pour une nouvelle macro.
J’ai dans le fichier joint en colonne B des cellules vides et des cellules dont la valeur est « 5 » et en colonne C des cellules vides et des cellules dont la valeur est « 3 ».
J’aimerais que la macro effectue les tâches suivantes :
  • Elle doit chercher les cellules de la colonne C ayant la valeur « 3 ».
  • Par exemple, si la cellule C4 a la valeur « 3 » et que la cellule B4 a une valeur ne rien faire.
  • Par exemple, si la cellule C7 a la valeur « 3 » et que la cellule B7 est vide alors copier la cellule C7 dans la cellule B7.
  • Par exemple, si la cellule C10 a la valeur « 3 » et que la cellule B10 est vide alors copier la cellule C10 dans la cellule B10.
  • Par exemple, si la cellule C13 a la valeur « 3 » et que la cellule B13 est vide alors copier la cellule C13 dans la cellule B13.
  • Par exemple, si la cellule C16 a la valeur « 3 » et que la cellule B16 est vide alors copier la cellule C16 dans la cellule B16.
  • Par exemple, si la cellule C19 a la valeur « 3 » et que la cellule B19 est vide alors copier la cellule C19 dans la cellule B19.
  • Et ainsi de suite pour toutes les cellules de la colonne C ( +/- 8000 lignes ).
Une fois cette tâche réalisée, la macro doit remplacer les valeurs de la colonne B par « 1 ».
Les valeurs « 3 » et « 5 » dans les colonnes B et C peuvent varier.
En espérant d’avoir été clair.
Merci d’avance pour votre aide.
ABDELHAK
 

Fichiers joints

vgendron

XLDnaute Barbatruc
Bonjour

ci dessous un code à tester
VB:
Sub stat()
Dim tablo() As Variant

'demande les valeurs à chercher et adapter
ValB = CInt(Application.InputBox("Donnez la valeur à chercher dans la colonne B"))
ValC = CInt(Application.InputBox("Donnez la valeur à chercher dans la colonne C"))

With Sheets("STAT_PREVISION") 'dans la feuille
    Fin = .UsedRange.Rows.Count 'on récupère le numéro de la dernière ligne
    tablo = .Range("A1:C" & Fin).Value 'on met les 3 colonnes dans un tablo
    
    For i = LBound(tablo, 1) To UBound(tablo, 1) 'pour chaque ligne du tablo
        If tablo(i, 3) = ValC And tablo(i, 2) = "" Then tablo(i, 2) = tablo(i, 3) 'si la colonne C contient la valeur C et que la colonne B est vide, alors on copie C en B
    Next i
    .Range("A1:C" & Fin) = tablo 'on recolle le tablo résultat
End With
End Sub
PS: je n'ai pas compris le dernier point; remplacer la colonne B par des 1..??
 

ABDELHAK

XLDnaute Occasionnel
Bonjour vgendron
Les lignes de codes que vous m’avez envoyées fonctionnent parfaitement. Il donne les résultats que j’attendais.
En tout cas, je vous remercie chaleureusement pour votre aide.
Si ce n’est pas trop vous demander, j’aimerais un petit rajout qui remplace les valeurs de la colonne B par la valeur « 1 ».
A+
ABDELHAK
PS : Pour répondre à notre ami job75, sincèrement je ne sais pas trop mais les résultats sont là.
 

vgendron

XLDnaute Barbatruc
hello @job75
juste parce que Abdelhak a indiqué que les valeurs pouvaient varier... j'imagine qu'il va vouloir faire la meme chose de B vers C..?
sinon on peut evidemment supprimer la ligne de code
 
Haut Bas