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 :

Erreur reference circulaire


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut Erreur reference circulaire
    bonjour,
    j'ai un enorme probleme , enfin peut etre pas si grand mais etant novice en vba il me fait peur!
    je m'explique , j'avais a peu presune dizaine de classeur avec dans chaque classeur une feuille qui m'intéressait j'ai donc créer un nouveau classeur ou j'ai copier colle a la main la feuille qui m'intéressait de chaque classeur , j'ai donc dix feuilles .
    Maintenant je souhaite additioner certaine cellules ( les memes pour chaque feuille) j'ai essaye de faire un code pour ca mais ca me metais des ereurs , j'ai donc regarder sur des forums mais de la ils on donne une methode "a la main" ou je devais juste ecrire pars exemple "= feuille!B6 + feuille!B6" seulement il y'a une ereur qui est aparru parce que j'ai apparament affaire a des cellules circulaires ou je ne sais quoi , je pense que c'est parceque les cellules vienne de copie /colle
    je ne sais pas quoi faire du coup ( parceque je n'ai pas fait ce copier colle une fois mais bien un trentaine de fois donc j'aimerais pas que ce soit inutile )
    svp aidez moi !!
    voici le code que j'ai essaye de faire
    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 addition()
    Dim Entree As Workbook, Sortie As Workbook
    Nomfichierentree = Application.GetOpenFilename("Fichier Excel (*.xls), *.xsl")
    If Nomfichierentree <> False Then
       Set Entree = Workbooks.Open(Nomfichierentree)
    End If
    NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls), *.xsl")
    If NomFichierSortie <> False Then
       Set Sortie = Workbooks.Open(NomFichierSortie)
    End If
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Lot"
    Worksheets("f1").Range("1:5,24:27").Copy Worksheets("Lot").Range("A1")
    Worksheets("f1").Columns("A").Copy Worksheets("Lot").Range("A1")
    For Each sh In Sheets
    sh.Activate
     
        For j = 2 To 19
           For i = 6 To 23
     
                Lot.Cells(i, j).Value = Lot.Cells(i, j).Value + sh.Cells(i, j).Value
            Next i
         Next j
     
     
    For j = 2 To 19
           For i = 28 To 45
     
                Lot.Cells(i, j).Value = Lot.Cells(i, j).Value + sh.Cells(i, j).Value
            Next i
         Next j
     
    Next
    End Sub
    merci pour votre aide

  2. #2
    Expert éminent 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
    Par défaut
    Quand tu travailles avec plusieurs fichiers ouverts simultanément tu dois indiquer à quel classeur se rapportent les feuilles

    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("f1").Columns("A")
    qui se rapporte à la feuille f1 du classeur actif, il est plus que souhaitable de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sortie.Worksheets("f1").Columns("A")
    où sortie est une variable Workbook instanciée auparavant.

    En plus ta variable Lot n'est pas définie et n'a pas de sens. Au lieu de il y a lieu de corriger comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sortie.Worksheets("Lot").Cells(...


    PS. si tes feuilles ont une structure identique, regarde du côté de l'Outil Consolider offert par excel

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    merci pour ta reponse
    j'ai essaye de mettre Sortie.Worksheets("Lot").Cells(...
    seulement cela me met incompatibilite de type ..

  4. #4
    Expert éminent 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
    Par défaut
    PS. si tes feuilles ont une structure identique, regarde du côté de l'Outil Consolider offert par excel

    Icompatibilité de type car tu es en présence d'une somme de données non numériques

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    j'ai finalement reussi a faire tourner le code il ne me met pas d'erreur seulement je ne trouve pas les nombres attendue
    voici le 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Sub addition()
    Dim Entree As Workbook, Sortie As Workbook
    Nomfichierentree = Application.GetOpenFilename("Fichier Excel (*.xls), *.xsl")
    If Nomfichierentree <> False Then
       Set Entree = Workbooks.Open(Nomfichierentree)
    End If
    NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls), *.xsl")
    If NomFichierSortie <> False Then
       Set Sortie = Workbooks.Open(NomFichierSortie)
    End If
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Lot"
    Worksheets("f1").Range("1:5").Copy Worksheets("Lot").Range("A1")
    Worksheets("f1").Range("24:27").Copy Worksheets("Lot").Range("A24")
    Worksheets("f1").Columns("A").Copy Worksheets("Lot").Range("A1")
    For Each sh In Sheets
    If sh.Name = Lot Then Exit For
    sh.Activate
     
        For j = 2 To 19
           For i = 6 To 23
     
              Sortie.Worksheets("Lot").Cells(i, j).Value = Sortie.Worksheets("Lot").Cells(i, j).Value + sh.Cells(i, j).Value
            Next i
         Next j
     
     
    For j = 2 To 19
           For i = 28 To 45
     
                Sortie.Worksheets("Lot").Cells(i, j).Value = Sortie.Worksheets("Lot").Cells(i, j).Value + sh.Cells(i, j).Value
    'je veux juste aditioner les celule mais les nombres qrenvoyer sont bien trop grand ..
            Next i
         Next j
     
    Next
    Sortie.Worksheets("Lot").Activate
    Range("A1").Select
         Selection.Replace what:="0", replacement:="-"
    'cet action n'est pas prise en compte je ne comprend pas pourquoi
    End Sub
    j'ai du mal a comprendre ce qui ne vas pas dans mon code
    si quelqu'un voit le probleme je veux bien
    merci beaucoup par avance

    oui mais finalement ca ne me le met plus , j'ai regarder consolider mais j'ai pas du tout compris ce que c'était ..

  6. #6
    Expert éminent 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
    Par défaut
    Tu n'as pas suivi les recommandations partout

    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
    Sub Addition()
    Dim Entree As Workbook, Sortie As Workbook
    Dim Ws As Worksheet, Sh As Worksheet
    Dim i As Integer, j As Integer
    Dim Fichier
     
    Fichier = Application.GetOpenFilename("Fichier Excel (*.xls), *.xls")
    If Fichier <> False Then Set Entree = Workbooks.Open(Fichier)
     
    Fichier = Application.GetOpenFilename("Fichier Excel (*.xls), *.xls")
    If Fichier <> False Then Set Sortie = Workbooks.Open(Fichier)
     
    With Sortie
        Set Ws = .Worksheets.Add(After:=.Sheets(.Sheets.Count))
        Ws.Name = "Lot"
     
        With Entree.Worksheets("F1")
            .Range("A1:S5").Copy Ws.Range("A1")
            .Range("A24:S27").Copy Ws.Range("A24")
            .Range("A:A").Copy Ws.Range("A1")
        End With
     
        Entree.Close False
        Set Entree = Nothing
     
        For Each Sh In .Worksheets
            If Sh.Name <> Ws.Name Then
                For j = 2 To 19
                    For i = 6 To 45
                        If i < 24 And i > 27 Then Ws.Cells(i, j).Value = Ws.Cells(i, j).Value + Sh.Cells(i, j).Value
                    Next i
                Next j
            End If
        Next Sh
        Set Ws = Nothing
    End With
    End Sub

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 35
    Par défaut
    merci beaucoup !!
    par contre je suis desole de te deranger encore mais au niveau de With Entree.Worksheets("f1")
    on me renvoie l'erreur :erreur automation
    je comprend pas pourquoi

  8. #8
    Expert éminent 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
    Par défaut
    Parce que j'avais supposé que le programme doit ouvrir les 2 fichiers et que F1 est une feuille appartenant au classeur Entree. En plus c'était juste pour te montrer la démarche

    Sinon, pour bloquer l'éventualité d'une Annuler l'ouverture de l'un des fichiers
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Sub Addition()
    Dim Entree As Workbook, Sortie As Workbook
    Dim Ws As Worksheet, Sh As Worksheet
    Dim i As Integer, j As Integer
    Dim Fichier
     
    Fichier = Application.GetOpenFilename("Fichier Excel (*.xls), *.xls")
    If Fichier <> False Then
        Set Entree = Workbooks.Open(Fichier)
     
        Fichier = Application.GetOpenFilename("Fichier Excel (*.xls), *.xls")
        If Fichier <> False Then
            Set Sortie = Workbooks.Open(Fichier)
     
            With Sortie
                Set Ws = .Worksheets.Add(After:=.Sheets(.Sheets.Count))
                Ws.Name = "Lot"
     
                With Entree.Worksheets("F1")
                    .Range("A1:S5").Copy Ws.Range("A1")
                    .Range("A24:S27").Copy Ws.Range("A24")
                    .Range("A:A").Copy Ws.Range("A1")
                End With
     
                Entree.Close False
                Set Entree = Nothing
     
                For Each Sh In .Worksheets
                    If Sh.Name <> Ws.Name Then
                        For j = 2 To 19
                            For i = 6 To 45
                                If i < 24 And i > 27 Then Ws.Cells(i, j).Value = Ws.Cells(i, j).Value + Sh.Cells(i, j).Value
                            Next i
                        Next j
                    End If
                Next Sh
                Set Ws = Nothing
            End With
            Sortie.Close True
            Set Sortie = Nothing
            MsgBox "Traitement terminé"
        Else
            Entree.Close False
            Set Entree = Nothing
            MsgBox "Ouverture de fichier Sortie annulée"
        End If
    Else
        MsgBox "Ouverture des fichiers annulée"
    End If
    End Sub
    Toujours d'après mes devinettes.

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

Discussions similaires

  1. References circulaires dans des masterpages
    Par Arthis dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/01/2009, 10h16
  2. Erreur : reference to undefined identifier: ’
    Par acer_intel dans le forum Scheme
    Réponses: 8
    Dernier message: 01/03/2008, 16h10
  3. Réponses: 8
    Dernier message: 16/01/2007, 11h16
  4. Réponses: 4
    Dernier message: 19/06/2006, 17h02
  5. Treeview : Erreur "Reference to variable or parameter..
    Par Tirlibibi dans le forum XMLRAD
    Réponses: 4
    Dernier message: 06/05/2003, 11h19

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