Aide sur macro

Bonjour,

Il y a quelques temps, deux d'entre vous m'avaient bien aidé sur un fichier. J'ai cherché à adapter la macro que vous aviez faite pour un autre fichier un peu différent, mais très ressemblant.

Une petite partie du code macro (adapté) ne me donne pas ce que je voudrais.

Cette macro est exécutée dans le fichier appelé "Récap déclaration", elle ouvre, l'un après l'autre des "fichiers collaborateurs" et est censée me rapatrier des données de ces fichiers collaborateurs selon les modalités suivantes :

Sub récap_déclaration()

Dim Chemin As String, Nom_collaborateur As String, Mois_concerné As String, Ligne_mois As Integer

Dim i As Integer, j As Integer, k As Integer

Dim Ligne As Long

Application.ScreenUpdating = False

Range("B6:C17,B24:C35,E6:H17,E24:H35,J6:M17,J24:M35,O6:R17,O24:R35,T6:T17,T24:T35") .ClearContents 'quand on change l'année en S1 efface anciennes données dans plages citées

k = Range("S1")

'Chemin = "E:\Mes documents\Mes documents\comptes\Prévision salaires indiv\"

Chemin = "E:\Mes documents\Mes documents\comptes\Prévision salaires indiv\"

For Ligne = 4 To 22 Step 18 ' Les lignes des noms (boucle rajoutée)

For i = 2 To 21 Step 5 ' De la colonne B à la colonne U

Nom_collaborateur = Cells(Ligne, i) ' Modification

If Nom_collaborateur = "" Then GoTo Etiquette

Workbooks.Open Filename:=Chemin & "\" & Nom_collaborateur & "\" & "Salaires " & Nom_collaborateur & ".xls"

For j = 1 To Sheets.Count

Sheets(j).Activate

If Right(Sheets(j).Name, 4) <> k Then GoTo Etiquette_bis

Mois_concerné = LCase(Left(ActiveSheet.Name, 4))

Select Case Mois_concerné

Case "janv"

Ligne_mois = 1

Case "févr"

Ligne_mois = 2

Case "mars"

Ligne_mois = 3

Case "avri"

Ligne_mois = 4

Case "mai "

Ligne_mois = 5

Case "juin"

Ligne_mois = 6

Case "juil"

Ligne_mois = 7

Case "août"

Ligne_mois = 8

Case "sept"

Ligne_mois = 9

Case "octo"

Ligne_mois = 10

Case "nove"

Ligne_mois = 11

Case "déce"

Ligne_mois = 12

End Select

Ligne_mois = Ligne_mois + 1 + Ligne ' Modification décalage

With ThisWorkbook.Sheets("Base")

.Cells(Ligne_mois, i) = Range("Q44")

.Cells(Ligne_mois, i + 3) = Range("A10")

If Range("Q43") = 0 Then

.Cells(Ligne_mois, i + 1) = ""

Else

.Cells(Ligne_mois, i + 1) = Range("Q43")

If ("M46" - "M42") > 0 Then

.Cells(Ligne_mois, i + 4) = Range("M46")

Else

.Cells(Ligne_mois, i + 4) = Range("M42")

End If

End If

End With

Etiquette_bis:

Next j

' Application.DisplayAlerts = False

ActiveWorkbook.Close savechanges:=False

'Application.DisplayAlerts = True

Etiquette:

Next i

Next Ligne ' Fin de la boucle rajoutée

End Sub

La partie qui pose problème est la suivante :

If ("M46" - "M42") > 0 Then

.Cells(Ligne_mois, i + 4) = Range("M46")

Else

.Cells(Ligne_mois, i + 4) = Range("M42")

J'aimerais que Si (M46-M42) > 0 (dans les fichiers collaborateurs), la 5ème colonne (i + 4) pour chaque personne concernée et pour chaque mois concerné dans "récap déclaration" (ce sont les colonnes F,K,P,U) soit égale à M46 du fichier collaborateur, sinon (Si (M46-M42)=<0) alors la cellule (i + 4) (dans Récap Déclaration)= M42 du fichier collaborateur.

Ca ne fonctionne que si dans les fichiers collaborateurs, la cellue I10 est supérieure à zéro. Or elle est souvent vide ou égale à zéro.

Ces fichiers collaborateurs sont générés par userform et les feuilles contiennent souvent des formules.

Je vous transmets tous les fichiers.

Le fichier concerné par la macro est dans "contributions" "essai récap".

D'avance merci pour votre aide.

Cordialement 8) 8)

14essai-nyre.rar (190.53 Ko)

Salut,

Un fichier .rar = grrrrrr !

Il y a trop de texte, je n'ai pas tout lu !

Essaie de remplacer

If ("M46" - "M42") > 0 Then

par

If Range("M46") - Range("M42") > 0 Then

Cordialement.

Bonsoir Yvouille,

Un fichier .rar = grrrrrr !

Oui je sais, mais avec plusieurs dossiers, j'avais un problème de taille de fichier à uploader ...

J'ai déjà essayé cette écriture sans succès.

Merci d'avoir tenté

Cordialement.

Bonsoir

Dans la macro il y a

                With ThisWorkbook.Sheets("Base")
                    .Cells(Ligne_mois, i) = Range("Q44")
                    .Cells(Ligne_mois, i + 3) = Range("A10")
                    If Range("Q43") = 0 Then
                        .Cells(Ligne_mois, i + 1) = ""
                    Else
                        .Cells(Ligne_mois, i + 1) = Range("Q43")

                    If Range("M46") > Range("M42") Then
                     .Cells(Ligne_mois, i + 4) = Range("M46")
                    Else
                     .Cells(Ligne_mois, i + 4) = Range("M42")

                    End If
                End If
                End With

Et dans ce code (partie surlignée)

 If Range("M46") > Range("M42") Then

Equivaut à

 If Range("M46") - Range("M42")  > 0Then

Alors où est le problème ?

J'ai fait un essai en modifiant le fichier de Croquignole, feuille Mars 2012

J'ai mis 1 dans I10

Sauvegarde, Fermeture

Ensuite lancement de la macro du fichier "Récap déclaration"

J'ai obtenu 18 en cellule F8

C'est bon ou ce n'est pas bon ?

Une info : L'effacement du tableau n'est pas bon

Range("B6:C17,B24:C35,E6:H17,E24:H35,J6:M17,J24:M35,O6:R17,O24:R35,T6:U17,T24:U35").ClearContents

Bonjour Banzaï64,

J'ai fait un essai en modifiant le fichier de Croquignole, feuille Mars 2012

J'ai mis 1 dans I10

Sauvegarde, Fermeture

Ensuite lancement de la macro du fichier "Récap déclaration"

J'ai obtenu 18 en cellule F8

C'est bon ou ce n'est pas bon ?

Oui le 18 est bon mais le résultat de la feuille de calcul de Croquignole est faux. J'avais indiqué dans mon post :

Ca ne fonctionne que si dans les fichiers collaborateurs, la cellue I10 est supérieure à zéro. Or elle est souvent vide ou égale à zéro.

Mais lorsque la cellule doit être vide (ou égale à zéro, c'est pareil dans mon cas), pourquoi est-ce que je ne peux pas faire apparaître la valeur contenue dans M42 ou M46 ?

Range("B6:C17,B24:C35,E6:H17,E24:H35,J6:M17,J24:M35,O6:R17,O24:R35,T6:U17,T24:U35").ClearContents

C'est vrai, merci, je vais corriger.

A bientôt

Cordialement

Bonjour à Yvouille et Banzaï64 d'abord, et à tous les autres ensuite, 8)

Je reviens vous tenir informés puisque vous avez bien voulu vous pencher sur mon problème.

Nos échanges m'ont déjà permis de penser que le code macro n'était pas en cause .

Depuis 2 jours j'ai bataillé avec différentes formules dans mes feuilles de calculs "collaborateurs" et il s'avère que les formules contenant la fonction "SI" dans les cellules en rapport avec celles appelées par la macro doivent empêcher son fonctionnement. Je ne sais pas pourquoi, mais tous les essais que j'ai fait m'amenaient à cette conclusion.

Alors puisque la formule de la macro ne fonctionnait pas, il ne me restait qu'une solution, c'était la faire disparaître :

Dans les fichiers Croquignole, Philochard, Ribouldingue et Mandrake,

J'ai entré (en "M45") la formule correspondante à celle sur laquelle la macro ne renvoie rien si I10 n'est pas > à zéro.

Donc en "M45" des feuilles collaborateurs j'ai entré :

=SI($M$46>$M$42;$M$46;$M$42)

Et dans la macro j'ai supprimé :

If ("M46" - "M42") > 0 Then

.Cells(Ligne_mois, i + 4) = Range("M46")

Else

.Cells(Ligne_mois, i + 4) = Range("M42")

End If

Pour le remplacer par

.Cells(Ligne_mois, i + 4) = Range ("M45")

Et ça marche !!!

Voilà... Juste pour ne pas rester sur un sujet non résolu.

Merci tout de même, car les échanges font toujours avancer.

A bientôt

Cordialement

Bonjour

Très bien que tu as réussi à te dépanner

mais pour mon information personnelle (tu n'y ais pas obligé du tout)

If ("M46" - "M42") > 0 Then

Ce code n'a jamais existé dans la macro (voir le fichier que tu as envoyé)

ensuite peux tu mettre le code que tu as mis à partir de

With ThisWorkbook.Sheets("Base") 

jusqu'au

End With

Merci

8) 8)

Ce code n'a jamais existé dans la macro

C'est vrai le code du fichier joint était celui-ci

If Range("M46") > Range("M42") Then

J'ai fait tellement de tentatives depuis 2 jours que je n'ai pas tout ramené à l'origine…

Je ne suis pas sûre de comprendre ce que tu voudrais : Après la sélection des lignes qui correspondent aux mois, voici un extrait du code tel qu'il fonctionne à présent :

Ligne_mois = Ligne_mois + 1 + Ligne ' Modification décalage

With ThisWorkbook.Sheets("Base")

.Cells(Ligne_mois, i) = Range("Q44")

.Cells(Ligne_mois, i + 3) = Range("A10")

.Cells(Ligne_mois, i + 4) = Range("M45")

If Range("Q43") = 0 Then

.Cells(Ligne_mois, i + 1) = ""

Else

.Cells(Ligne_mois, i + 1) = Range("Q43")

End If

End With

Etiquette_bis:

Next j

' Application.DisplayAlerts = False

ActiveWorkbook.Close savechanges:=False

'Application.DisplayAlerts = True

Etiquette:

Next i

Next Ligne ' Fin de la boucle rajoutée

End Sub

Est-ce que ça correspond à ce que tu demandes ou est ce que tu voudrais que je place

With ThisWorkbook.Sheets("Base")

A un autre endroit ?

Cordialement

Bonsoir

merci de ta réponse

Je comprends mieux pourquoi tu dis que cela fonctionne

Tu as déplacé l'instruction (du moins son équivalent)

Avant

                With ThisWorkbook.Sheets("Base")
                    .Cells(Ligne_mois, i) = Range("Q44")
                    .Cells(Ligne_mois, i + 3) = Range("A10")
                    If Range("Q43") = 0 Then
                        .Cells(Ligne_mois, i + 1) = ""
                    Else
                        .Cells(Ligne_mois, i + 1) = Range("Q43")

' Instruction ici
                    If Range("M46") > Range("M42") Then
                     .Cells(Ligne_mois, i + 4) = Range("M46")
                    Else
                     .Cells(Ligne_mois, i + 4) = Range("M42")

                    End If
                End If
                End With

Maintenant

With ThisWorkbook.Sheets("Base")
.Cells(Ligne_mois, i) = Range("Q44")
.Cells(Ligne_mois, i + 3) = Range("A10")
' Instruction ici
.Cells(Ligne_mois, i + 4) = Range("M45")
If Range("Q43") = 0 Then
.Cells(Ligne_mois, i + 1) = ""
Else
.Cells(Ligne_mois, i + 1) = Range("Q43")

End If

End With

Tu aurais déplacé le code d'où il était à sa nouvelle place, tu n'aurais pas eu besoin de modifier tes fichiers Croquignole, Philochard, Ribouldingue et Mandrake

Le plus important dans tout ça c'est que ton problème est solutionné

Rechercher des sujets similaires à "aide macro"