1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

VBA Comparer 2 cellules sur 2 feuilles differentes

Discussion dans 'Forum Excel' démarrée par Johanes, 19 Mars 2017.

Tags:
  1. Johanes

    Johanes XLDnaute Nouveau

    Inscrit depuis le :
    19 Mars 2017
    Messages :
    21
    "J'aime" reçus :
    0
    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:

  2. vgendron

    vgendron XLDnaute Barbatruc

    Inscrit depuis le :
    24 Février 2009
    Messages :
    3378
    "J'aime" reçus :
    171
    Utilise:
    Excel 2007 (PC)
    Hello

    si j'ai bien compris le besoin..ci joints deux codes à placer dans le module standard
    Code (Visual Basic):

    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
     
     
  3. vgendron

    vgendron XLDnaute Barbatruc

    Inscrit depuis le :
    24 Février 2009
    Messages :
    3378
    "J'aime" reçus :
    171
    Utilise:
    Excel 2007 (PC)
    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:

    Johanes aime votre message.
  4. Johanes

    Johanes XLDnaute Nouveau

    Inscrit depuis le :
    19 Mars 2017
    Messages :
    21
    "J'aime" reçus :
    0
    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:

    Dernière édition: 19 Mars 2017
  5. vgendron

    vgendron XLDnaute Barbatruc

    Inscrit depuis le :
    24 Février 2009
    Messages :
    3378
    "J'aime" reçus :
    171
    Utilise:
    Excel 2007 (PC)
    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:

    Johanes aime votre message.
  6. vgendron

    vgendron XLDnaute Barbatruc

    Inscrit depuis le :
    24 Février 2009
    Messages :
    3378
    "J'aime" reçus :
    171
    Utilise:
    Excel 2007 (PC)
    Rev3 avec un bouton "Effacer" qui permet d'effacer les bouteilles d'eau et champagne pour revenir à un général vierge
     

    Pièces jointes:

    Johanes aime votre message.
  7. Johanes

    Johanes XLDnaute Nouveau

    Inscrit depuis le :
    19 Mars 2017
    Messages :
    21
    "J'aime" reçus :
    0
    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: 19 Mars 2017
  8. vgendron

    vgendron XLDnaute Barbatruc

    Inscrit depuis le :
    24 Février 2009
    Messages :
    3378
    "J'aime" reçus :
    171
    Utilise:
    Excel 2007 (PC)
    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

    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 aime votre message.
  9. Johanes

    Johanes XLDnaute Nouveau

    Inscrit depuis le :
    19 Mars 2017
    Messages :
    21
    "J'aime" reçus :
    0
    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:

  10. vgendron

    vgendron XLDnaute Barbatruc

    Inscrit depuis le :
    24 Février 2009
    Messages :
    3378
    "J'aime" reçus :
    171
    Utilise:
    Excel 2007 (PC)
    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:

    Johanes aime votre message.
  11. Johanes

    Johanes XLDnaute Nouveau

    Inscrit depuis le :
    19 Mars 2017
    Messages :
    21
    "J'aime" reçus :
    0
    Merci. La derniere petite chose c est pour les couleurs pour water c est que pour les cellules ou il y a un nombre. merci
     
  12. vgendron

    vgendron XLDnaute Barbatruc

    Inscrit depuis le :
    24 Février 2009
    Messages :
    3378
    "J'aime" reçus :
    171
    Utilise:
    Excel 2007 (PC)
    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:

    Johanes aime votre message.
  13. Johanes

    Johanes XLDnaute Nouveau

    Inscrit depuis le :
    19 Mars 2017
    Messages :
    21
    "J'aime" reçus :
    0
    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 ?
     
  14. Johanes

    Johanes XLDnaute Nouveau

    Inscrit depuis le :
    19 Mars 2017
    Messages :
    21
    "J'aime" reçus :
    0
    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:

    Dernière édition: 20 Mars 2017
  15. Johanes

    Johanes XLDnaute Nouveau

    Inscrit depuis le :
    19 Mars 2017
    Messages :
    21
    "J'aime" reçus :
    0
    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 (Text):

    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: 20 Mars 2017
  16. klin89

    klin89 XLDnaute Impliqué

    Inscrit depuis le :
    6 Août 2008
    Messages :
    935
    "J'aime" reçus :
    63
    Sexe :
    Masculin
    Habite à:
    La Terre Plaine
    Utilise:
    Excel 2003 (PC)
    Bonsoir à tous, :)

    Avec le fichier du post #9
    il faur préalablament exécuter la macro Initialiser de vgendron pour le nettoyage des cellules de la feuille "GENERAL"
    Code (Visual Basic):
    Option Explicit
    Sub test()
    Dim a, i As Long, j As Long, w(), dico As Object, txt As String
        Set dico = CreateObject("Scripting.Dictionary")
        a = Sheets("Champagne").Range("a1").CurrentRegion.Value
        For i = 2 To UBound(a, 1) - 1
            dico.Item(a(i, 2)) = VBA.Array(True, Empty)
        Next
        a = Sheets("water").Range("a1").CurrentRegion.Value
        For i = 2 To UBound(a, 1) - 1
            If dico.exists(a(i, 2)) Then
                w = dico.Item(a(i, 2))
                w(1) = a(i, 1)
                dico.Item(a(i, 2)) = w
            Else
                dico.Item(a(i, 2)) = VBA.Array(False, a(i, 1))
            End If
        Next
        Application.ScreenUpdating = False
        'Initialiser
        With Sheets("GENERAL").Range("L10:AA" & Range("L" & Rows.Count).End(xlUp).Row)
            a = .Value
            For i = 1 To UBound(a, 1) Step 2
                For j = 1 To UBound(a, 2)
                    txt = CStr(a(i + 1, j))
                    If dico.exists(txt) Then
                        If dico.Item(txt)(0) = True Then
                            .Cells(i + 1, j).Interior.ColorIndex = 15
                        End If
                        If Not IsEmpty(dico.Item(txt)(1)) Then
                            .Cells(i, j).Value = dico.Item(txt)(1)
                        End If
                    End If
                Next
            Next
        End With
        Application.ScreenUpdating = True
    End Sub
    klin89
     
    Johanes aime votre message.
  17. Johanes

    Johanes XLDnaute Nouveau

    Inscrit depuis le :
    19 Mars 2017
    Messages :
    21
    "J'aime" reçus :
    0
    klin89 Le problem a ete resolu. Pouvez vous regarder mon post #14.
    C est un petit peu plus compliquer...
     

Partager cette page