VBA : Copie ligne pour controle report totaux

bertrand1202

XLDnaute Occasionnel
Bonjour


Je souhaite établir une récapitualtion ( déjà fait) et par la suite pouvoir contrôler que les totaux de la recap soient égaux aux totaux de chaque feuille.J'ai fait un fichier réduit et je bloque sur copy destination .

je dis à la macro d'aller sur page recap 2 ligne en dessous de total et ensuite de coller chaque total de chaque feuille en dessous.

Merci de votre aide
 

Pièces jointes

  • Copie de test%20report%20ligne%20controle(1).xls
    30.5 KB · Affichages: 67
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : VBA : Copie ligne pour controle report totaux

Bonjour Bertrand

pas tout compris... tu fais apparemment un test sur le nom d'une feuille, alors que ta variable "ws" n'est pas initialisée...

Code:
If ws.Name = "Recap"

bonne journée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : VBA : Copie ligne pour controle report totaux

Re

non "dim" permet de déclarer une variable, pour l'initialiser :

Code:
Set ws = ActiveSheet

tu peux également l'utiliser via une boucle "for each"

Code:
For Each ws In ActiveWorkbook.Worksheets

dans ce cas ta variable "ws" sera initialiser lors de la boucle par tous les membres de la collection "worksheets"...

@+
 

bertrand1202

XLDnaute Occasionnel
Re : VBA : Copie ligne pour controle report totaux

Re


Merci beaucoup Pierrot, la difficulté tient au fait que je ne peux déclarer qu'une seule fois for each, donc si je l'utilise pour ws , je ne pourrai plus l'utiliser pour vcellule , dans ce cas comment combiner les deux?

Merci e ton aide. j'essaye d'aancer sur Vbamais je n'ai pas intégré toute la logique malgré les recherches sur le forum
Merci encore.
 

Pierrot93

XLDnaute Barbatruc
Re : VBA : Copie ligne pour controle report totaux

Re

Dans ce cas, faire 2 boucles imbriquées, comme ceci :

Code:
Dim ws As Worksheet, vcellule As Range
For Each ws In ActiveWorkbook.Worksheets
    For Each vcellule In ws.Range("a6:a" & ws.Range("a65536").End(xlUp).Row)
        If ws.Name = "Recap" And vcellule.Value = "total" Then
            'ton action
        End If
    Next vcellule
Next ws

Boucles sur toutes les feuilles, et pour chaque feuilles boucle sur chaque cellules de la colonne A

@+
 

bertrand1202

XLDnaute Occasionnel
Re : VBA : Copie ligne pour controle report totaux

Re


Merci Pierrot, je vais appliquer cette méthode et essayer de comprendre pourquoi je me plante quand je fais deux for each, merci beacoup.

j'espère enfin résoudre mon problème , je reviendrai au cas où , donc si je ne m'en sors pas, je dois y arriver avec du temps.

Bonne journée,
merci à toi
 

Pierrot93

XLDnaute Barbatruc
Re : VBA : Copie ligne pour controle report totaux

Re

A noter que si tu ne veux agir que sur la feuille "recap", il est préférable de tester son nom avant de partir dans la seconde boucle :

Code:
Dim ws As Worksheet, vcellule As Range
For Each ws In ActiveWorkbook.Worksheets
    If ws.Name = "Recap" Then
        For Each vcellule In ws.Range("a6:a" & ws.Range("a65536").End(xlUp).Row)
            If vcellule.Value = "total" Then
                'ton action
            End If
        Next vcellule
    End If
Next ws

@+
 

bertrand1202

XLDnaute Occasionnel
Re : VBA : Copie ligne pour controle report totaux

Bonjour

quelqu'un pourrait il me dire ce qui ne va pas , la macro tourne mais ne reporte pas sur la page recap feuille par feuille les lignes "total" de chaqe WS
de manière à ce que je comprenne et puisse l'adapter à d'autres exemples.

Merci d'avance
Le code :
Sub controlereport()
Dim ws As Worksheet, vcellule As Range
Dim vLigne As Integer
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "Recap" Then
For Each vcellule In ws.Range("a6:a" & ws.Range("a65536").End(xlUp).Row)
If vcellule.Value = "total" Then
vcellule.Offset(vLigne).EntireRow.Copy Sheets("Recap").vcellule.Offset(vLigne + 2).Value
End If
Next vcellule
End If
Next ws
vLigne = vLigne + 1

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 319
Membres
103 177
dernier inscrit
grizly