Bonjour à tous,
Je suis stagiaire et Excel je m’y connais un peu. Cependant je fais face à un problème qui je pense ne puisse pas être résolu par les fonctions « Si » ou « RechercheV ». Il m’a été conseillé de me diriger vers les codes VBA. Je n’ai pas un niveau excellent en VBA c’est pour cela je sollicite votre aide.
- J’ai deux colonnes A et B. dans la colonne A on retrouve les différents produits et dans la colonne B on retrouve le statut des produits.
- On a que trois types de statut pour les produits. Soit le produit est actif, inactif ou dormant.
1- D’abord « Actif » domine sur dormant et « dormant » domine sur « Inactif »
C'est à dire que:
- Si j’ai le produit Banane sur 6 lignes, et que sur ces 6 lignes on a les trois statuts (actif, dormant, inactif) dans le désordre, je veux que le code donne la priorité à "actif "en premier en attribuant actif sur toutes les 6 lignes de Banane.
- Mais si sur ces 6 lignes de Banane on a que « dormant » et « inactif », je veux que le code attribue la priorité à Dormant en affectant Dormant sur toutes ces 6 lignes de Banane.
- si sur ces 6 lignes de Bananes, on a qu’inactif, dans ce cas on peut garder ces 6 lignes en inactif.
- si sur ces 6 lignes de Bananes, on a que Dormant, dans ce cas on peut garder ces 6 lignes en Dormant.
- si sur ces 6 lignes de Bananes, on a que Actif, dans ce cas on peut garder ces 6 lignes en Actif.
Pour mieux vous expliquer, Je vous laisse donc un tableau en exemple de ce que je cherche à obtenir
Cà va faire déjà plus d'un mois que je suis dessus mais je n'arrive pas à atteindre mon but. J'espère que vous comprenez ma frustration. En effet j'ai pu écrire un petit bout de code VBA avec l'aide de quelques camarades mais on y est toujours pas.
Le code VBA que j'ai réussi à écrire arrive à bien faire la différence entre chaque produit mais le seul soucis est qu'il attribut le statut du produit en première lignes aux autres lignes sans prendre en compte le faite que C'est " Actif " qui prime si il est présent pour le produit sinon c'est "Dormant" et pour finir avec "inactif"
################# Mon code déjà écrit ###########################
Option Explicit
Private Sub AdaptStatus_Click()
Dim sh As Worksheet
Dim myRng As String
Dim fruit, status As String
Dim j As Long: j = 2
Dim cible As Range
Dim addressOne As String
Set sh = ThisWorkbook.Sheets("Fruits")
myRng = "A2:B" & sh.Cells(Rows.Count, 1).End(xlUp).Row
With sh.Range(myRng)
Do While True
If Cells(j, 1) = "" Then Exit Do
fruit = Cells(j, 1).Value
status = Cells(j, 2).Value
Set cible = .Find((fruit), LookIn:=xlValues)
If Not cible Is Nothing Then
addressOne = cible.Address
Do
cible.Offset(0, 1) = status
Set cible = .FindNext(cible)
Loop While Not cible Is Nothing And cible.Address <> addressOne
End If
j = j + 1
Loop
End With
MsgBox "Tous les statuts sont mis à jour !", vbInformation + vbOKOnly, "Mise à jour ds statuts"
End Sub
####################################################################
Dans la colonnes j à partir de la ligne 2 j'ai écrit les trois statut: Actif, Dormant et Inactif
Je vous remercie à l'avance si quelqu'un avait le temps de se pencher sur le sujet
Merci d'avance
Je suis stagiaire et Excel je m’y connais un peu. Cependant je fais face à un problème qui je pense ne puisse pas être résolu par les fonctions « Si » ou « RechercheV ». Il m’a été conseillé de me diriger vers les codes VBA. Je n’ai pas un niveau excellent en VBA c’est pour cela je sollicite votre aide.
- J’ai deux colonnes A et B. dans la colonne A on retrouve les différents produits et dans la colonne B on retrouve le statut des produits.
- On a que trois types de statut pour les produits. Soit le produit est actif, inactif ou dormant.
1- D’abord « Actif » domine sur dormant et « dormant » domine sur « Inactif »
C'est à dire que:
- Si j’ai le produit Banane sur 6 lignes, et que sur ces 6 lignes on a les trois statuts (actif, dormant, inactif) dans le désordre, je veux que le code donne la priorité à "actif "en premier en attribuant actif sur toutes les 6 lignes de Banane.
- Mais si sur ces 6 lignes de Banane on a que « dormant » et « inactif », je veux que le code attribue la priorité à Dormant en affectant Dormant sur toutes ces 6 lignes de Banane.
- si sur ces 6 lignes de Bananes, on a qu’inactif, dans ce cas on peut garder ces 6 lignes en inactif.
- si sur ces 6 lignes de Bananes, on a que Dormant, dans ce cas on peut garder ces 6 lignes en Dormant.
- si sur ces 6 lignes de Bananes, on a que Actif, dans ce cas on peut garder ces 6 lignes en Actif.
Pour mieux vous expliquer, Je vous laisse donc un tableau en exemple de ce que je cherche à obtenir
Produit | Statut | Ce qui est attendu |
---|---|---|
Banane | inactif | Actif |
Banane | Actif | Actif |
Banane | dormant | Actif |
Banane | inactif | Actif |
Banane | Actif | Actif |
Banane | dormant | Actif |
Mangue | inactif | dormant |
Mangue | dormant | dormant |
Mangue | inactif | dormant |
Mangue | inactif | dormant |
Pomme | inactif | inactif |
Pomme | inactif | inactif |
Pomme | inactif | inactif |
Cà va faire déjà plus d'un mois que je suis dessus mais je n'arrive pas à atteindre mon but. J'espère que vous comprenez ma frustration. En effet j'ai pu écrire un petit bout de code VBA avec l'aide de quelques camarades mais on y est toujours pas.
Le code VBA que j'ai réussi à écrire arrive à bien faire la différence entre chaque produit mais le seul soucis est qu'il attribut le statut du produit en première lignes aux autres lignes sans prendre en compte le faite que C'est " Actif " qui prime si il est présent pour le produit sinon c'est "Dormant" et pour finir avec "inactif"
################# Mon code déjà écrit ###########################
Option Explicit
Private Sub AdaptStatus_Click()
Dim sh As Worksheet
Dim myRng As String
Dim fruit, status As String
Dim j As Long: j = 2
Dim cible As Range
Dim addressOne As String
Set sh = ThisWorkbook.Sheets("Fruits")
myRng = "A2:B" & sh.Cells(Rows.Count, 1).End(xlUp).Row
With sh.Range(myRng)
Do While True
If Cells(j, 1) = "" Then Exit Do
fruit = Cells(j, 1).Value
status = Cells(j, 2).Value
Set cible = .Find((fruit), LookIn:=xlValues)
If Not cible Is Nothing Then
addressOne = cible.Address
Do
cible.Offset(0, 1) = status
Set cible = .FindNext(cible)
Loop While Not cible Is Nothing And cible.Address <> addressOne
End If
j = j + 1
Loop
End With
MsgBox "Tous les statuts sont mis à jour !", vbInformation + vbOKOnly, "Mise à jour ds statuts"
End Sub
####################################################################
Dans la colonnes j à partir de la ligne 2 j'ai écrit les trois statut: Actif, Dormant et Inactif
Je vous remercie à l'avance si quelqu'un avait le temps de se pencher sur le sujet
Merci d'avance