IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème macro excel 2003 vers 2007


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    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!

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu peux joindre une copie de ton fichier (format .xlsm) après l'avoir compressé et sans données confidentielles?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    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.

  6. #6
    Membre actif Avatar de CODYCO
    Homme Profil pro
    Webplanneur
    Inscrit en
    Avril 2009
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 217
    Points : 259
    Points
    259
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ActiveWorkbook.Names.Add Name:="Z_Num_opé", RefersToR1C1:= _
            Selection
    Ensuite tu boucle sur chaque cellule de ta zone nomé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For Each cell In Range("Z_Num_opé")
    Person je trouve qu'on s'y retrouve mieux comme ca...

    Bonne chance
    Webplanneur comme disait Plastik...

    Si la réponse répond à votre besoin, votre vote nous encouragera.
    Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. importation de macros de 2003 vers 2007
    Par clippy38 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/05/2010, 21h47
  2. Conversion macros excel 2003 en 2007
    Par cadouxmi dans le forum Excel
    Réponses: 2
    Dernier message: 16/02/2009, 09h24
  3. Macro Word 2003 vers 2007
    Par MGB2007 dans le forum VBA Word
    Réponses: 3
    Dernier message: 18/10/2008, 14h01
  4. De Excel 2003 vers 2007
    Par Philippe608 dans le forum Excel
    Réponses: 5
    Dernier message: 29/05/2008, 21h07
  5. Macro VBA EXCEL 2003 vers 2007
    Par Jacques13170 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/04/2008, 19h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo