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 13/12/2011, 21h29   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 3
Points : 3
Par défaut Problème macro excel 2003 vers 2007

Bonsoir,

Je travaille mon fichier à la maison sous excel 2003, ma macro fonctionne la plupart du temps mais a tout de même parfois un bug sur une ligne. Au travail avec excel 2007, cette ligne ne passe plus du tout! j'avoue que je ne trouve pas de solution.

Ci-dessous la ligne du délit en rouge. En essayant de la traduire en bon français, je recherche à mettre à jour les lignes où la valeur en colonne U est supérieure à 1, et où la 3eme, la 4ème, la 5eme et la 12ème colonne précedente sont vides.

Merci pour vos lumières!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Sub MAJSalaire()
Dim SheetReq As Worksheet, SheetBD As Worksheet, SheetMaJ As Worksheet
Dim NumMois As Byte
Dim ValeurReq As Variant
Dim TheCell As Range, CellFind As Range
Dim Matricule As String
Dim i As Integer

 
'On pointe les différentes feuilles à l'aide de variables
Set SheetReq = ThisWorkbook.Sheets("REquête")
Set SheetBD = ThisWorkbook.Sheets("PREVISIONNEL")
Set SheetMaJ = ThisWorkbook.Sheets("MAJmois")
'On va chercher nos infos
NumMois = SheetMaJ.Range("C1")
 
'Formule visant à mettre en évidence les changements de salaire en cours d'année et
'à les modifier pour le restant de l'année

'On boucle sur les cellules contenues dans la colonne U
For Each TheCell In SheetReq.Range("U2", SheetReq.Cells(SheetReq.Rows.Count, "U").End(xlUp))
    'On garde notre valeur en tête
    ValeurReq = TheCell.Offset(0, -2).Value
    'On regarde si la cellule contient une valeur supérieur à 1
    If TheCell > 1 And TheCell.Offset(0, -3) = 0 And TheCell.Offset(0, -4) = 0 And TheCell.Offset(0, -5) = 0 And TheCell.Offset(0, -12) = 0 Then    'On récupère le matricule (on regarde 11 colonnes en arrière pour voir la colonne A)
        Matricule = TheCell.Offset(0, -20)
        'On recherche le matricule dans PREVISIONNEL
        Set CellFind = SheetBD.Columns("B").Find(Matricule, LookIn:=xlValues)
        'On verifie si un matricule correspondant a été trouvé
        If Not CellFind Is Nothing Then
        'On colle la valeur à sa place du mois étudié au mois de décembre
        For i = NumMois To 18
        CellFind.Offset(0, i - 1) = ValeurReq
        Next i
        End If
    End If
'On passe à la cellule suivante
Next
 
 End Sub
anne1635 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 22h17   #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
Je viens de tester ton code sur 2010 sur un fichier exemple, je n'ai pas eu de problème.
As tu des cellules fusionnées?

Sinon, j'ai re adapté ton code avec lequel j'ai testé
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Sub MAJSalaire()
Dim SheetReq As Worksheet, SheetBD As Worksheet
Dim c As Range, v As Range
Dim ValeurReq As Variant
Dim Matricule As String
Dim NumMois As Byte
 
Application.ScreenUpdating = False
'On pointe les différentes feuilles à l'aide de variables
Set SheetReq = ThisWorkbook.Worksheets("REquête")
Set SheetBD = ThisWorkbook.Worksheets("PREVISIONNEL")
'On va chercher nos infos
NumMois = Val(ThisWorkbook.Worksheets("MAJmois").Range("C1"))
If NumMois > 0 Then
    'Formule visant à mettre en évidence les changements de salaire en cours d'année et à les modifier pour le restant de l'année
    'On boucle sur les cellules contenues dans la colonne U
    For Each c In SheetReq.Range("U2:U" & SheetReq.Cells(SheetReq.Rows.Count, "U").End(xlUp).Row)
        'On regarde si la cellule contient une valeur supérieur à 1
        If c > 1 And c.Offset(0, -3) = "" And c.Offset(0, -4) = "" And c.Offset(0, -5) = "" And c.Offset(0, -12) = "" Then
            'On garde notre valeur en tête
            ValeurReq = c.Offset(0, -2).Value
            'On récupère le matricule (on regarde 11 colonnes en arrière pour voir la colonne A)
            Matricule = c.Offset(0, -20)
            'On recherche le matricule dans PREVISIONNEL
            Set v = SheetBD.Range("B:B").Find(Matricule, LookIn:=xlValues, LookAt:=xlWhole)
            'On verifie si un matricule correspondant a été trouvé
            If Not v Is Nothing Then
                'On colle la valeur à sa place du mois étudié au mois de décembre
                v.Offset(0, NumMois - 1).Resize(1, 19 - NumMois) = ValeurReq
                Set v = Nothing
            End If
        End If
        'On passe à la cellule suivante
    Next c
End If
Set SheetReq = Nothing
Set SheetBD = Nothing
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 14/12/2011, 20h49   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 3
Points : 3
Merci Mercatog pour ta réponse.

J'ai essayé ton code au travail, et si ça ne bug pas, ca ne fait plus rien non plus...

Aprés réflexion, mon fichier excel au travail était sous un format excel classique qui ne prenait pas en compte les macros. La première fois que j'ai enregistré avec ma macro, il m'a demandé de changer de format et j'ai dû l'enregistrer sou un format 2007 avec macro activées ou quelque chose comme ça. Est-ce ce format qui pourrait être en cause?

Je viens d'enregistrer mon fichier du travail sur mon ordi en incrémentant ma macro et le bug intervient sur la même ligne...
A l'origine, j'avais fait ma macro en reprenant unqiuement les têtes de lignes et non pas le fichier au complet, mon erreur est peut-être là, mais je ne vois pas la différence car les colonnes, formats..; sont identiques!

Quelqu'un a une suggestion?

De mon coté je repars faire d'autres tests pour la 3ème soirée consécutive ! Il faut que ca marche!!!

Voici l'erreur qui était indiquée au travail

Erreur d'exécution 13
Incompatibilité de type

SI ça peut aider...

Merci pour votre aide!
anne1635 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 20h49   #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
Tu peux joindre une copie de ton fichier (format .xlsm) après l'avoir compressé et sans données confidentielles?
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 22h26   #5
Invité de passage
 
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 3
Points : 3
Je viens de te faire un fichier en supprimant les colonnes non concernées par ma requête, en essayant qu'il y ait tous les cas à tester (car j'ai plusieurs macro avec une base identique) et avant de te le transmettre je l'ai testé, CA MARCHE....

Il faut donc que je creuse encore, ca ne vient pas de la macro! Déjà c'est un bon point. Ce doit être une question de formats qui ne sont pas pris en charge par la macro.... Avec ton expérience en vba, cela te semble-t-il possible?

J'ai tout changé mes formats en nombres, mes données étaient en standard.

Je ne comprends pas vraiment, mais cette fois-ci le fichier de mon travail fonctionne bien avec ma macro sur mon pc perso.

Je tenterai demain d'enregistrer ce fichier perso sur mon poste de travail et de relancer la macro. Je renvoie un message demain pour dire ce qu'il en est.
anne1635 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 08h14   #6
Membre habitué
 
Avatar de CODYCO
 
Homme
Webplanneur
Inscription : avril 2009
Messages : 141
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Webplanneur
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 141
Points : 144
Points : 144
Par défaut en complément

Pour te facilité la tache lorsque je dois traiter ce type d'info je déclare bien mes variables. Dans ton cas "TheCell" ne semble pas etre déclarer comme "Range".

Enfin pour traiter plus rapidement les colonnes je leur donne un nom et traite toute la zone du nom. par exemple

Déclaration de variable
Nome une colonne selectionnée
Code :
1
2
3
 
ActiveWorkbook.Names.Add Name:="Z_Num_opé", RefersToR1C1:= _
        Selection
Ensuite tu boucle sur chaque cellule de ta zone nomé
Code :
1
2
 
For Each cell In Range("Z_Num_opé")
Person je trouve qu'on s'y retrouve mieux comme ca...

Bonne chance
CODYCO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 21h25   #7
Invité de passage
 
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 3
Points : 3
Bonsoir et avant tout merci pour le temps passé sur mon cas.

Ca y est ma macro marche également au travail
Visiblement c'était effectivement les formats de données qui bloquaient.

Je retourne à mon apprentissage de vba! En espérant pouvoir me débrouiller grâce aux sujets existants sur le forum
anne1635 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 04h41.


 
 
 
 
Partenaires

Hébergement Web