VBA Comparer 2 cellules sur 2 feuilles differentes

Johanes

XLDnaute Nouveau
Bonjour,

Je voudrais creer une macro a l'interieur d'un fichier excel.

J'ai une feuille General avec des numeros de chambre et le recapitulatif des bouteilles d'eau et de champagne.
J'ai une feuille Champagne avec les numeros de chambre ou je dois envoyer une bouteille de champagne par chambre.
J'ai une feuille water avec les numeros de chambre en colonne B et en colonne A le nombre de bouteille d'eau a envoyer par chambre.

Je voudrai tout d'abord comparer les chambres dans la feuille champagne et dans la feuille General: En surlignant les numeros de chambre dans la feuille general et a la fin de la ligne mettre le total de chambre surligner.

Et ensuite je voudrais reporter le nombre de bouteille d'eau dans la feuille water sur la feuille general. Sauf que dans la feuille water j'ai les bouteilles d'eau en A1 pour la chambre qui est B1. et sur la feuille general si la chambre correspondante est en G12 je dois inscrire le nombre de bouteille d'eau en G11.

si possible creer un bouton pour executer la macro en page General et non pas faire ALT+F8

Ci-joint Fichier que j'ai rempli manuellement.
 

Pièces jointes

  • HouseKeeping Spreadsheet Avant.xls
    101 KB · Affichages: 60
  • HouseKeeping Spreadsheet Apres.xls
    125 KB · Affichages: 62

vgendron

XLDnaute Barbatruc
Hello

si j'ai bien compris le besoin..ci joints deux codes à placer dans le module standard
VB:
Sub ChampagneToGeneral()
'on récupère la liste des cabines pour lesquelles il faut une bouteille de champagne
Set Champ4CabinList = Sheets("Champagne").Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row)

'Champ4CabinList.Select
Set TabGeneral = Sheets("GENERAL").Range("L11:AA" & Range("L" & Rows.Count).End(xlUp).Row)
'TabGeneral.Select

For Each cabin In Champ4CabinList
    With TabGeneral
        Set ici = .Find(cabin, lookat:=xlWhole)
            If Not ici Is Nothing Then
                ici.Select
                ici.Interior.ColorIndex = 48
            End If
    End With
Next cabin

End Sub

Sub WaterToGeneral()
Application.Calculation = xlCalculationManual 'pour empecher l'exécution de la fonction personalisée qui ralentit cette macro
'on récupère la liste des cabines pour lesquelles il faut de l'eau
Set Water4CabinList = Sheets("water").Range("A2:B" & Range("B" & Rows.Count).End(xlUp).Row)

'Water4CabinList.Select
Set TabGeneral = Sheets("GENERAL").Range("L11:AA" & Range("L" & Rows.Count).End(xlUp).Row)
'TabGeneral.Select

For Each cabin In Water4CabinList.Columns(2).Cells
    With TabGeneral
        Set ici = .Find(cabin, lookat:=xlWhole)
            If Not ici Is Nothing Then
                ici.Offset(-1, 0) = cabin.Offset(0, -1)
                End If
    End With
Next cabin
Application.Calculation = xlCalculationAutomatic 'on réactie le mode de calcul automatique
End Sub
 

vgendron

XLDnaute Barbatruc
avec PJ:
regarde le code, notamment pour la macro Water4General
faut il commencer par effacer toutes les bouteilles d'eau déjà remplies dans la feuille Général ?
ou faut il pouvoir le faire séparément..

j'en ai profité pour ajouter des formules dans tes dernières colonnes qui comptabilisent le nombre de chambres..
 

Pièces jointes

  • HouseKeeping Spreadsheet Apres.xls
    135 KB · Affichages: 63

Johanes

XLDnaute Nouveau
avec PJ:
regarde le code, notamment pour la macro Water4General
faut il commencer par effacer toutes les bouteilles d'eau déjà remplies dans la feuille Général ?
ou faut il pouvoir le faire séparément..

j'en ai profité pour ajouter des formules dans tes dernières colonnes qui comptabilisent le nombre de chambres..
Bonjour, tout d'abord merci pour votre Aide. Donc le Fichier "HouseKeeping Spreadsheet Avant" c'est ce que j'ai de vierge. Ensuite Je cree 2 nouvelles feuilles sur ce fichier qui s'appelle "Champagne" et "Water" Je copie paste les numeros de chambre dans champagne et aussi dans water avec le nombre de bouteille d'eau. Ce que je veux c'est creer la macro pour que ca remplisse la feuille General automatiquement. le fichier que j'ai envoyer "HouseKeeping Spreadsheet Apres" dans la feuille general j'ai tout rempli manuellement. Je vous joint le fichier sans que je remplisse automatiquement.
J'ai copier votre code dans mon spreadsheet mais le bouton "Mise A Jour" ne fonctionne pas car il va chercher dans Housekeeping spreadsheet Avant. Aussi de Champagne a Water. La fonction pour comptabiliser le nombre de case colorer ne fonctionne pas. Merci pour votre aide
 

Pièces jointes

  • HouseKeeping Spreadsheet Avant.xls
    132 KB · Affichages: 53
Dernière édition:

vgendron

XLDnaute Barbatruc
ah oui pardon, je devais avoir les deux fichiers ouverts quand j'ai écrit les macro. (dans le mauvais fichier)
voir Rev2: normalement c'est résolu, en tout cas, chez moi, ca fonctionne
je viens de vérifier: la fonction personalisée est ok..
et la macro ChampagneToGeneral aussi meme avec une autre couleur (rouge ici)
 

Pièces jointes

  • HouseKeeping Spreadsheet ApresRev2.xls
    144.5 KB · Affichages: 75

Johanes

XLDnaute Nouveau
PERFECTO.. 3 petites questions : Mon Excel est de 2010 et est en Anglais car je travaille pour une compagnie americaine.

1) Si je veux changer le mot EFFACER sur le bouton et je veux mettre DELETE a la place : comment faire svp
Si je veux changer le mot Mise a Jour sur le bouton et mettre UPDATE a la place: Comment faire svp
J ai essayer de voir dans la macro et je ne trouve pas ou cest.

2) Je voudrais changer la couleur rouge et je preferai avoir un gris clair 25% darker.
J ai essayer de changer par rapport a la cellule AA11 mais du coup les nombres total affichent 0 si je change de la couleur rouge.

3) Dans la feuille general, la ou il y a les nombres pour le total des bouteilles d eau au dessus des chambres est ce que cest possible de colorier le fond en bleur clair Accent 1 Lighter 40%.
 
Dernière édition:

vgendron

XLDnaute Barbatruc
pour modifier le texte des boutons: clic droit sur le bouton pour le sélectionner, et tu sélectionnes/modifies le texte à l'intérieur

pour la couleur rouge, gris ou autre: après avoir changé la couleur de AA11, clique sur Update pour que la macro refasse le travail avec la nouvelle couleur: la fonction personalisée va ainsi donner les bons résultats

la ou il y a les nombres pour le total des bouteilles d eau au dessus des chambres est ce que cest possible de colorier le fond en bleur clair Accent 1 Lighter 40%.
est ce qu'il s'agit des nombres qui viennent de la feuille Water ? ou juste du total dans la dernière colonne?
dans le premier cas, renvoie le fichier avec la couleur que tu souhaites: je vais modifier la macro Initialiser pour qu'elle garde la couleur..d'ailleurs.. en écrivant, ca me fait penser que normalement, elle n'efface pas la mise en forme.. juste les valeurs.. tu peux faire l'essai
 

Johanes

XLDnaute Nouveau
Pour Modifier le texte: C est fait.

Pour la couleur rouge j ai changer en gris clair dans la case AH11; puis si je clique sur Mise A Jour toutes les cases en rouge deviennent grises mais dans la colonne pour le total a chaque fin de ligne, ca marque 0. donc ca ne correspond pas aux totals.

Pour la couleur des bouteilles d eau. J ai mis la couleur que je voudrais dans la premiere ligne.
 

Pièces jointes

  • HouseKeeping Spreadsheet ApresRev3.xls
    237.5 KB · Affichages: 64

vgendron

XLDnaute Barbatruc
il s'agissait d'un problème entre Color et ColorIndex
et comme je ne maitrise pas bien la ou les différences qu'il peut y avoir entre les différentes versions d'Excel, les couleurs peuvent varier d'un pc à l'autre..
je regarderai ca demain..
 

Pièces jointes

  • HouseKeeping Spreadsheet ApresRev3 (1).xls
    239 KB · Affichages: 61

vgendron

XLDnaute Barbatruc
Hello

voir Rev4
1) pb de couleurs légèrement différentes résolu:
ca tient dans la différence qu'il y a entre Colorindex (53 couleurs qui peuvent varier d'un pc à l'autre) et Color (toutes les nuances)
2) coloration des cellules uniquement si elles contiennent un nombre
 

Pièces jointes

  • HouseKeeping Spreadsheet ApresRev4.xls
    240.5 KB · Affichages: 67

Johanes

XLDnaute Nouveau
Hello

voir Rev4
1) pb de couleurs légèrement différentes résolu:
ca tient dans la différence qu'il y a entre Colorindex (53 couleurs qui peuvent varier d'un pc à l'autre) et Color (toutes les nuances)
2) coloration des cellules uniquement si elles contiennent un nombre
Merci Vgendron, peux tu m'aider sur un autre cas ?
J'ai deja une macro mais je voudrais la modifier un peu. C'est un peu plus compliquer. Je ne sais pas trop si je dois recommencer de zero ou si je peux juste aller a l'interieur et modifier 2 ou 3 choses ?
 

Johanes

XLDnaute Nouveau
Re bonjour,

Pour repondre a votre question sur mon autre post. Oui c'est le meme projet mais c'est le travail en amont de celui la que l'on vient de regler.

pour recapituler : Toutes les semaines je recois une liste de client.
J'ai mis un petit exemple ci joint le fichier s'appelle Download.
Quand je recois le download j'utilise ma Macro 1.
J'ouvre les 2 fichiers je me met sur Download et je fait ALT + F8.
Ce qui me donne le fichier ci-joint "Download après Macro".

**** Maintenant le resultat fini je Copie coller les feuilles de Champagne et Water dans le document HK Spreadsheet, et je fais tourner HK la macro de HK spreadsheet ****

Je voudrais modifier ma "Macro1".
2 grosses modifications sont :

1) Uniquement pour les Feuilles "Bronze", "Silver", "Gold", "Platinum", "PlatPlus", "Ambassador". Faire en sorte que les numeros de chambre ne revienne pas 2 fois dans les differentes feuilles. et je voudrais garder le numero de chambre dans la feuille du plus grand statut en suivant cette ordre du plus petit au plus grand :
BRONZE < SILVER < GOLD < PLATIN < PLPLUS < AMBASS
Exemple : si j'ai 2 clients dans la meme chambre, 1 silver et 1 gold. Je veux que le numero de chambre avec le nom du client soit placer que dans la feuille Gold.

2) J'ai mis des conditions dans les feuilles Water et Chocostrawb.
a) Pour Water: Uniquement pour les status Gold, Platin, PlPlus, Ambass
b) pour Chocostrawb: uniquement pour Platin, Plplus, Ambass.

Si les clients ont 2 differents statut mais tout deux eligible sont dans la meme chambre je voudrais les mettre sur la meme ligne.
Exemple: pour water : Si un Gold et un Ambass sont dans la meme chambre la Macro les met sur une ligne differente.

Doit - on recommencer une toute nouvelle macro plus simple ou on peut juste modifier celle la ?

Merci de votre soutien.
 

Pièces jointes

  • Download.xls
    27.5 KB · Affichages: 80
  • Macro1.xls
    105 KB · Affichages: 59
  • Download apres macro.xls
    243 KB · Affichages: 66
Dernière édition:

Johanes

XLDnaute Nouveau
J'ai essayer de travailler avec plusieurs functions tout d'abord pour creer un ordre de grandeur mais je n'arrive pas a l'incorporer dans la macro :

Code:
Sub main()

  With Worksheets(GetSheetName(Range("D:D").Value, Range("F:F").Value))
  MsgBox .Name
  End With

End Sub
[code]

[code]
Function GetSheetName(val1 As String, val2 As String) As String
  Select Case GetRank(UCase(val1)) - GetRank(UCase(val2))
  Case Is < 0
  GetSheetName = "GOLD"
  Case Is > 0
  GetSheetName = "Platin"
  Case Else
  GetSheetName = val1
  End Select
End Function
[code]

[code]
Function GetRank(val As String) As Long
  GetRank = Application.WorksheetFunction.Match(val, Array("Bronze", "Silver", "Gold", "Platin", "PlPlus", "Ambass"))
End Function
Function GetRank(val As String) As Long
  GetRank = Switch(val = "BRONZE", 0, _
  val = "SILVER", 1, _
  val = "GOLD", 2, _
  val = "PLATIN", 3, _
  val = "PLPLUS ", 4, _
  val = "AMBASS", 5)
End Function
[code]

[code]
Function GetRank(val As String) As Long
  Select Case val
  Case "BRONZE"
  GetRank = 0
  Case "SILVER"
  GetRank = 1
  Case "GOLD"
  GetRank = 2
  Case "PLATIN"
  GetRank = 3
  Case "PLPLUS"
  GetRank = 4
  Case "AMBASS"
  GetRank = 5
  End Select
End Function
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
359
Réponses
10
Affichages
302

Statistiques des forums

Discussions
314 628
Messages
2 111 333
Membres
111 104
dernier inscrit
JEMADA