Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/09/2011, 23h15   #1
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Par défaut [Novice] Comparer deux feuilles excel.

Bonjour à tous,

J'en reviens à vous car cela est trop compliqué pour mes faibles notions en vba.

J'ai une feuille nomée "Feries" avec les dates des jours fériées sur plusieurs années en "B2" et en "C2" (Jour de l'An, Lundi de Pâques, Fête du travail, etc...) qui correspont aux dates des jours fériés depuis 2010 jusqu'en 2024.

Sur une autre feuille nomée "Prestations" j'ai en "A2" toutes les dates du calendrier depuis 2010 jusqu'en 2024

Comment en vba effectuer une recherche dans la feuille "Prestations" et chaque fois qu'il trouve une date de jour feries qui se trouve dans la feuille "Feries" ajouter dans la feuille "Prestations" le nom du jour ferie en "C" (Jour de l'An, Lundi de Pâques, Fête du travail, etc...) ?

Avec une formule excel cela donne +- :
=SiErreur(RechercheV($B$2;Ferie;2;Faux);"")

Merci de m'avoir lu
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 00h32   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonsoir
Curieux comme procédé d'écrire tous les jours fériés jusqu'à 2024!
Pour ta demande, tu as ta formule Excel qui marche, il suffit de la traduire en vba.
Ci-après un exemple
  • Feuille Feries, la plage à 2 colonnes comportant les dates fériées et leur nominations est nommée: Ferie
  • Feuille Prestations, à partir de A2 jusqu'à Axx on a les dates et sur chaque ligne de la colonne C, on écrit le nom de l'éventuel jour férié correspondant à la date en A (par ta formule)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub Test()
Dim LastLig As Long
 
Application.ScreenUpdating = False
With Worksheets("Prestations")
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row                'Dernière ligne remplie de la colonne A de la feuille prestations
    With .Range("C2:C" & LastLig)
        .Formula = "=IFERROR(VLOOKUP(A2,Ferie,2,FALSE),"""")"       'On écrit ta formule en C2:Cxx
        .Value = .Value                                             'On fige les valeurs données par la formule
    End With
End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 11h26   #3
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Par défaut Merci à mercatog

Merci de mavoir lu et repondu,

En fait j'ai une feuille nomée "Prestations" dans laquelle il y a en colonne "A" toutes les dates sur plusieurs années et je voudrais retrouver les jours fériés de chaques années et indiquer en colonne "D" "Jour de l'An, Lundi de Pâques, Fête du travail, etc...
J'ai lu pas mal sur le forum, mais je ne sais comment m'y prendre, car il y a des jours fériés fixes et non fixes et de quel manière rechercher les dates en "A" pour savoir si elles sont fériés ou pas.
Novice et passionné par le vba mais là, je suis dans le gaz total.

Feuille "Prestations"

........"A" .........................."D"

01/01/2010.................Jour de l'An
02/01/2010
etc..
04/04/2010
05/04/2010.................Lundi de Pâques
06/04/2010
etc...
etc...

Merci d'avance pour votre aide.
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 11h34   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Étant novice n'est pas une justification pour ne pas lire ce qu'on te propose.
Dans ton premier post tu parle de colonne C, maintenant de colonne D

Relis ma première proposition (en entier et non en diagonale) et essaies d'adapter.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 15h14   #5
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Par défaut Merci poir le code.

Comme vous disiez plus haut, "curieux comme procédé..."
Je me demandais si cela n'était pas plus aisé de trouver directement les jours fériés sur la feuille "Prestations" plutôt que (RechercheV) dans les celulles.
Comme je suis incapable de trouver les jours fériés en vba, je les ais directement notés sur une feuilles "Feries" pour les transposer sur la feuille "Prestations" par (RechercheV).

Pour ce qui est de votre code, cela fonctionne mais il recopie la formule à l'identique à chaque fois. Et je n'arrive pas à incrémenter de 1 le (R2C1), Donc de "D2" à "D3" à "D4" etc...


en D2: =SIERREUR(RECHERCHEV($A$2;Plage_Feries;2;FAUX);"")
.Formula = "=IFERROR(VLOOKUP(R2C1,Plage_Feries,2,FALSE),"""")"

en D3: =SIERREUR(RECHERCHEV($A$3;Plage_Feries;2;FAUX);"")
.Formula = "=IFERROR(VLOOKUP(R2C2,Plage_Feries,2,FALSE),"""")"

en D4: =SIERREUR(RECHERCHEV($A$4;Plage_Feries;2;FAUX);"")
.Formula = "=IFERROR(VLOOKUP(R2C3,Plage_Feries,2,FALSE),"""")"
etc...

Merci pour votre patience envers moi

fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 15h46   #6
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Regarde ce que j'avais proposé
Code :
1
2
3
4
With .Range("C2:C" & LastLig)
    .Formula = "=IFERROR(VLOOKUP(A2,Ferie,2,FALSE),"""")"       'On écrit ta formule en C2:Cxx
    .Value = .Value                                             'On fige les valeurs données par la formule
End With
enlève la ligne .value=.value et regarde les formules.

PS: J'ai bien rencontré quelque part sur ce forum un petit quelque chose qui permet de donner les jours fériés.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 16h58   #7
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Par défaut Merci, mais...

Merci de répondre mais là plus rien ne fonctionne.

je récapitule pour rester sur la même longueur d'onde. Car je n'y comprend plus rien.

Les dates des jours fériés sur plusieurs années sont sur la feuille "Feries" en colonne "A" et en colonnes "B" les noms des jours fériés: Jour de l'An, Lundi de Pâques, etc

Exemple feuille "Feries" :

......A.......................B
01/01/2010..........Jour de L'an
05/04/2010..........Lundi de Pâques
etc

Sur la feuille "Prestations" les dates sur plusieurs années en "A", les Mois/Année en "B" et en "C" y faire figurer les noms des jours fériés par rapport à la date en "A" recherchées dans la feuille "Fériés" avec (RechercheV)
Exemple feuille "Prestations" :

......A...............B.................C
01/01/2010....Janv-2010......Jour de l'An
02/01/2010....Janv-2010......
etc..
04/04/2010....Avri-2010.......
05/04/2010....Avri-2010.......Lundi de Pâques
06/04/2010....Avri-2010.......
etc...

en modifiant votre code :
.Formula = "=IFERROR(VLOOKUP(A2,Feries,2,FALSE),"""")"
par :
.Formula = "=IFERROR(VLOOKUP(R2C1,Plage_Feries,2,FALSE),"""")"

cela fonctionnais et m'écrivais la formule sur la feuille "Prestations" en C2 et me donnais bien pour le 01/01/2010 le Jour de l'An mais pas sur les lignes suivantes, j'avais aussi créer une plage de recherche sur la feuille "Feries" appelée : Plage-Feries

Mais en laissant votre code tel quel, cela ne fonctionne pas.

Encore merci pour votre incroyable patiente envers moi.
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 17h08   #8
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Oh là là, je suis surpris
Code :
.Formula = "=IFERROR(VLOOKUP(A2,Plage_Feries,2,FALSE),"""")"
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 17h43   #9
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Par défaut Merci, cela fonctionne mais re-mai

Cela fonctionne mais uniquement sur la celulle "C2" de la feuille "Prestation" et pas sur les celulles en dessous jusque la dernière trouvée.


Je suis le remede contre la crise de nerfs.

Mille merci.
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 18h11   #10
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Plage_Feries est le nom de quelle plage?
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 18h31   #11
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Bonsoir,

Voici une macro réalisée:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Macro1()
'
' Macro1 Macro
'
 
'
    Sheets("Feries").Select
    ActiveWindow.SmallScroll Down:=-12
    Range("A2:B151").Select
    ActiveWorkbook.Names.Add Name:="Plage_Feries", RefersToR1C1:= _
        "=Feries!R2C1:R151C2"
    Range("A2").Select
    Sheets("Prestations").Select
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(R2C1,Plage_Feries,2,FALSE),"""")"
    Range("C3").Select
End Sub
La plage "Plage_Feries" est sur la feuille "Feries" de A2 à B151

un grand merci.
bon amusement, fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 19h06   #12
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Macro1()
Dim LastLig As Long
 
Application.ScreenUpdating = False
ThisWorkbook.Names.Add Name:="Plage_Feries", RefersToR1C1:="=Feries!R2C1:R151C2"
Range("A2").Select
With Worksheets("Prestations")
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    With .Range("C2:C" & LastLig)
        .FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],Plage_Feries,2,FALSE),"""")"
        'Identique à la ligne qui suit
        '.Formula = "=IFERROR(VLOOKUP(A2,Plage_Feries,2,FALSE),"""")"
        .Value = .Value
    End With
End With
End Sub
Regarde la différence!
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 06h59   #13
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Par défaut merci.

J'ai du m'absenter quelques temps.

Me revoilà pour vous remercier de votre attention que vous m'avez porté.
Votre code fonctionne parfaitement.

Merci à mercatog mais aussi à devellopez.com

fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h17.


 
 
 
 
Partenaires

Hébergement Web