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 :

Macro VBA problème bizzare


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 170
    Par défaut Macro VBA problème bizzare
    Bonjour,

    j'ai fait une macro pour pouvoir calculer des sommes en fonction de variables mais je ne comprends pas il me marque un débogage (j'ai réutilisé une macro qui faisait des sommes en évitant de prendre en compte les doublons de classe) .

    Je veux juste faire une somme si ma date et ma ref de ma feuil Data Global est égale à ma date et ma ref de ma feuil data prototype alors je fais une somme des valeurs de mes classes situé dans la colonne 6 de ma feuil data prototype et j'affiche le résultat dans ma colonne 10 de ma feuil data global

    Voici mon code et la ligne en rouge est la ligne ou il y a un débogage

    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
    Sub test()
        Dim i As Long
        Dim j As Long
        Dim wksCriteres As Worksheet
        Dim rngDataDate As Range
        Dim wksCopie As Worksheet
        Dim c As Range
        
        Set wksCriteres = Worksheets("Critères")
        Set wksCopie = Worksheets("Copie")
        
        ' Trouver le titre de la colonne dans la page de données globales
        Set rngDataDate = Worksheets("Data Global").UsedRange.Columns(1).Find(What:="Date")
        If Not rngDataDate Is Nothing Then            ' trouvé!
            ' on commence l'itération à la ligne suivante...
            i = 1
            While Not IsEmpty(rngDataDate.Offset(i, 0).Value)
                ' filtrer la table de prestation en fonction de la date et ref
                wksCriteres.Range("A2").Value = rngDataDate.Offset(i, 0).Value ' 0 colonne 'Date'
                wksCriteres.Range("B2").Value = rngDataDate.Offset(i, 1).Value ' 1 colonne à droite 'Ref'
                Worksheets("Data prototype").UsedRange.AdvancedFilter Action:=xlFilterCopy, _
                                        CriteriaRange:=wksCriteres.Range("A1:B2"), _
                                        CopyToRange:=wksCopie.Range("A1"), _
                                        Unique:=True
                For j = 2 To wksCopie.UsedRange.Rows.Count
                    rngDataDate.Offset(i, 7).Value = rngDataDate.Offset(i, 7).Value + wksCopie.UsedRange.Cells(j, 6).Value
                Next j
                wksCopie.Cells.Delete
                i = i + 1
            Wend
        End If
    End Sub

    Merci du coup de main

  2. #2
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 170
    Par défaut
    Ben si mon adresse de départ c'est


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Worksheets("Data prototype").UsedRange.AdvancedFilter Action:=xlFilterCopy, _
                                        CriteriaRange:=wksCriteres.Range("A1:B2"), _
                                        CopyToRange:=wksCopie.Range("A1"), _
                                        Unique:=True
                For j = 2 To wksCopie.UsedRange.Rows.Count

  3. #3
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 170
    Par défaut
    En fait je veux faire la somme des valeurs de mes classes en fonction de mes dates et de mes ref

    Voici comment se présente ma Feuil Data prototype:
    colonne1 2 5 6
    24/11/07 FF0006 J 58.
    24/11/07 FF0006 P 55.456052
    24/11/07 FF0006 Y 23778
    24/11/07 GH0008 J 3424
    24/11/07 GH0008 P 2402
    24/11/07 GH0008 Y 23
    24/11/07 ZZ0010 J 8058
    24/11/07 ZZ0010 Y 234
    24/11/07 ZY0018 J 2732
    24/11/07 ZY0018 Y 1,00
    24/11/07 ZP0022 J 1602
    24/11/07 ZP0022 P 5352


    et Voici comment se présente ma feuil data Global

    colonne1 2 8
    24/11/07 FF0006 ici somme des valeurs pour la mm date et ref 24/11/07 GH0008
    24/11/07 ZZ0010
    24/11/07 ZY0018
    24/11/07 ZP0022

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu as raison, autant pour moi. Alors je ne vois pas.
    Désolé

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Une question bête : Tu n'as pas de ligne ou colonne vide dans ta plage de données ?
    Vérifie où te place ta ligne de code avec un select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rngDataDate.Offset(i, 7).Select
    et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wksCopie.UsedRange.Cells(j, 6).Select
    A tout hasard

  6. #6
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 170
    Par défaut
    Il met débogage à a ce niveau , coprends pas


    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
    Sub test()
        Dim i As Long
        Dim j As Long
        Dim wksCriteres As Worksheet
        Dim rngDataDate As Range
        Dim wksCopie As Worksheet
        Dim c As Range
        
        Set wksCriteres = Worksheets("Critères")
        Set wksCopie = Worksheets("Copie")
        
        ' Trouver le titre de la colonne dans la page de données globales
        Set rngDataDate = Worksheets("Data Global").UsedRange.Columns(1).Find(What:="Date")
        If Not rngDataDate Is Nothing Then            ' trouvé!
            ' on commence l'itération à la ligne suivante...
            i = 1
            While Not IsEmpty(rngDataDate.Offset(i, 0).Value)
                ' filtrer la table de prestation en fonction de la date et ref
                wksCriteres.Range("A2").Value = rngDataDate.Offset(i, 0).Value ' 0 colonne 'Date'
                wksCriteres.Range("B2").Value = rngDataDate.Offset(i, 1).Value ' 1 colonne à droite 'Ref'
                Worksheets("Data prototype").UsedRange.AdvancedFilter Action:=xlFilterCopy, _
                                        CriteriaRange:=wksCriteres.Range("A1:B2"), _
                                        CopyToRange:=wksCopie.Range("A1"), _
                                        Unique:=True
                For j = 2 To wksCopie.UsedRange.Rows.Count
                rngDataDate.Offset(i, 7).Select
                wksCopie.UsedRange.Cells(j, 6).Select
                    rngDataDate.Offset(i, 7).Value = rngDataDate.Offset(i, 7).Value + wksCopie.UsedRange.Cells(j, 6).Value
                Next j
                wksCopie.Cells.Delete
                i = i + 1
            Wend
        End If
    End Sub

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Remplace
    rngDataDate.Offset(i, 7).Select
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                Range(rngDataDate.address).Offset(i, 7).Select
    rngDataDate tout court contient la valeur trouvée, pas l'adresse de cette valeur.

  8. #8
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 170
    Par défaut
    Il m'affiche $A$13 lorsque je mets ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range(rngDataDate.Address).Offset(i, 7).Select
    mais apres j'ai un debogage sur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rngDataDate.Offset(i, 7).Value = rngDataDate.Offset(i, 7).Value + wksCopie.UsedRange.Cells(j, 6).Value

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    SAlut
    Humm désolé pas d'accord avec toi Offset renvoi bien un type range et le select devrait fonctionner.
    Donne nous voir un fichier avec matiere a travailler s'il te plait par ce que ca doit venir d'ailleur ton probleme
    Quel est le message d'erreur pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rngDataDate.Offset(i, 7).Select
    ?

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par ANTMA Voir le message
    Il m'affiche $A$13 lorsque je mets ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range(rngDataDate.Address).Offset(i, 7).Select
    mais apres j'ai un debogage sur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rngDataDate.Offset(i, 7).Value = rngDataDate.Offset(i, 7).Value + wksCopie.UsedRange.Cells(j, 6).Value
    Alors corrige ta ligne en utilisant le code que je t'ai passé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(rngDataDate.Address).Offset(i, 7).Value = Range(rngDataDate.Address).Offset(i, 7).Value + wksCopie.UsedRange.Cells(j, 6).Value

  11. #11
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 170
    Par défaut
    Voici un fichier exemple de ce que je cherche à faire


    Par avance merci de votre aide
    Fichiers attachés Fichiers attachés

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu as testé ce que je t'ai mis juste en dessus ?

  13. #13
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Re
    Bonj'ai compris
    Donc comme je le dis plus haut pas de probleme avec Offset ca renvoi bien un range
    Ton soucis est tout ailleur...
    Dans ta derniere colonne les valeur numeric qui y sont saisies ne sont pas au bon format car attention 51.654 et 51,654 ca n'est pas la meme chose en fonction des mparametre windows local, fait une petite recherche sur le forum tu va trouver ce qu'il faut pour convertir.
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 170
    Par défaut
    Les deux solutions ne marchent pas, j'ai bien modifié mais chiffres mais la macro ne marche pas quand même et j'ai aussi modifié le code et j'ai toujours un débogage (ligne en rouge)

    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
    Sub test()
        Dim i As Long
        Dim j As Long
        Dim wksCriteres As Worksheet
        Dim rngDataDate As Range
        Dim wksCopie As Worksheet
        Dim c As Range
        
        Set wksCriteres = Worksheets("Critères")
        Set wksCopie = Worksheets("Copie")
        
        ' Trouver le titre de la colonne dans la page de données globales
        Set rngDataDate = Worksheets("Data Global").UsedRange.Columns(1).Find(What:="Date")
        If Not rngDataDate Is Nothing Then            ' trouvé!
            ' on commence l'itération à la ligne suivante...
            i = 1
            While Not IsEmpty(rngDataDate.Offset(i, 0).Value)
                ' filtrer la table de prestation en fonction de la date et ref
                wksCriteres.Range("A2").Value = rngDataDate.Offset(i, 0).Value ' 0 colonne 'Date'
                wksCriteres.Range("B2").Value = rngDataDate.Offset(i, 1).Value ' 1 colonne à droite 'Ref'
                Worksheets("Data prototype").UsedRange.AdvancedFilter Action:=xlFilterCopy, _
                                        CriteriaRange:=wksCriteres.Range("A1:B2"), _
                                        CopyToRange:=wksCopie.Range("A1"), _
                                        Unique:=True
                For j = 2 To wksCopie.UsedRange.Rows.Count
                Range(rngDataDate.Address).Offset(i, 7).Value = Range(rngDataDate.Address).Offset(i, 7).Value + wksCopie.UsedRange.Cells(j, 6).Value                
                Next j
                wksCopie.Cells.Delete
                i = i + 1
            Wend
        End If
    End Sub
    je sais pas trop comment faire ????

  15. #15
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 127
    Par défaut
    Re
    Donne le message d'erreur

    Un bon reflexe a prendre et de typé les contenu des cellule au moment de leur utilisation, je sais qu'en VB c'est pas toujours obligatoire mais je pense que c'est un bon reflexe, ca permet de savoir ce que l'on attend de son code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rngDataDate.Offset(i, 7).Value = CDbl(rngDataDate.Offset(i, 7).Value) + CDbl(wksCopie.UsedRange.Cells(j, 6).Value)
    Mais dans ce cas meme sans CDlg() ca fonctionne chez moi sur le fichier que tu as donné, es tu sur de ne rien faire d'autre
    Donne le code que tu as modifié

    [Edit]Je sais pas pourquoi mais UsedRange ca me dis rien qui vaille, Je vois pas l'interet notement ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rngDataDate.Offset(i, 7).Value = CDbl(rngDataDate.Offset(i, 7).Value) + CDbl(wksCopie.Cells(j, 6).Value)
    Et dans ce code appart si tu mùet pas les bonne données dans les cellules je vois pas ce qui cloche desolé, donc j'attend ton code
    [/Edit]


    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  16. #16
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 170
    Par défaut
    Ca ne marche pas je comprends vraimant pas.

    Voici mon code

    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
    Sub test()
        Dim i As Long
        Dim j As Long
        Dim wksCriteres As Worksheet
        Dim rngDataDate As Range
        Dim wksCopie As Worksheet
        Dim c As Range
        
        Set wksCriteres = Worksheets("Critères")
        Set wksCopie = Worksheets("Copie")
        
        ' Trouver le titre de la colonne dans la page de données globales
        Set rngDataDate = Worksheets("Data Global").UsedRange.Columns(1).Find(What:="Date")
        If Not rngDataDate Is Nothing Then            ' trouvé!
            ' on commence l'itération à la ligne suivante...
            i = 1
            While Not IsEmpty(rngDataDate.Offset(i, 0).Value)
                ' filtrer la table de prestation en fonction de la date et ref
                wksCriteres.Range("A2").Value = rngDataDate.Offset(i, 0).Value ' 0 colonne 'Date'
                wksCriteres.Range("B2").Value = rngDataDate.Offset(i, 1).Value ' 1 colonne à droite 'Ref'
                Worksheets("Data prototype").UsedRange.AdvancedFilter Action:=xlFilterCopy, _
                                        CriteriaRange:=wksCriteres.Range("A1:B2"), _
                                        CopyToRange:=wksCopie.Range("A1"), _
                                        Unique:=True
                For j = 2 To wksCopie.UsedRange.Rows.Count
                    rngDataDate.Offset(i, 7).Value = CDbl(rngDataDate.Offset(i, 7).Value) + CDbl(wksCopie.Cells(j, 6).Value)
                Next j
                wksCopie.Cells.Delete
                i = i + 1
            Wend
        End If
    End Sub








    si tu peux m'envoyer le fichier Excel que tu as réussi à faire marché

  17. #17
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Chez moi aussi ta fonction 'fonctionne' bien. (Vista)
    Mais tu à un problème dans la feuille 'Data Prototype' colonne Valeurs, la majorité est entrée avec un point pour les décimales et cela devrait être une virgule.
    Tu a probablement un dépacement de capacité en fonction de ton PC ou de sa configuration. (il y à des résultats qui dépasse les 100 milliard)
    Mais il est vrai que si ça 'Bugge' chez toi tu ne pouvais pas le constater.
    A+
    Edit: Il n'y à rien a changer dans la fonction.
    Edit2: Mais je doute fort que les résultats soient ceux que tu attend.

  18. #18
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 170
    Par défaut
    mais j'ai changé les chiffres et je les ai mis avec des virgules et ça ne marche pas quand même.

    De plus les ciffres que j'ai mis dans l'exemple ne sont pas les bons


    et mon pac fonctionne avec XP et excel 2003

  19. #19
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 170
    Par défaut
    Pouvez vous m'envoyez votre fichier avec le code ??

    Merci

  20. #20
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Je ne sais pas comment ces nombres sont entrés mais je n'ai pas eu façile de les convertir.
    Une sub est ajoutée au cas ou il y aurait beaucoup de valeurs à modifier.
    J'ai aussi ajouté l'effacement de la plage où les données sont affichées vu que tu les ajoute à ce qui se trouve dans ces cellules.
    Le fichier est joint..
    A+
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Ecriture macros VBA problème
    Par simpole dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/10/2013, 19h01
  2. [XL-2003] Macro VBA : Problème avec SaveAs Worksheet en .txt
    Par tity333 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/08/2010, 16h16
  3. [VBA]Problème de macro et de dimension.
    Par Invité dans le forum Général VBA
    Réponses: 2
    Dernier message: 26/04/2007, 11h50
  4. [EXCEL - VBA] Problème ouverture fichier suite Macro Userform
    Par Guidhy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/04/2007, 09h18
  5. [VBA-E] Problème de tableau dans macro VBA
    Par Chouls dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/06/2006, 15h20

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