Compiler des données

Résolu/Fermé
Sigmakoff - Modifié le 27 mai 2020 à 10:11
Sigmakoff007 Messages postés 3 Date d'inscription mercredi 27 mai 2020 Statut Membre Dernière intervention 27 mai 2020 - 27 mai 2020 à 14:20
Bonjour,
Je suis novice dans la programmation avec VBA. Je suis confronter au problème suivant:
Je veux compiler des données de plusieurs feuilles dans une seule. Pour mon test, j'utilise 2 feuilles: Feuil1(pour recueillir les données) et Feuil2 (source de données en vrac). Mon approche est de recherche chaque variable de la colonne B de la feuil 1, dans la feuil 2, et s'il existe, de copier toutes ses données dans la feuil 1, devant la variable concernée. Et cela pour toutes variables de la feuil1. J'envisage également ajouter plusieurs feuilles de données à consolider dans la feuil1:
Voici le VBA que j'ai tenté de mettre en place pour gérer cela : Au début les choses fonctionnait, mais plus je tends vers mon objectif et plus rien ne marche:

Sub Test()

    Dim Cell_concernée As Range
    Dim Cell_suivante As Range
    Dim i As Integer
    Dim Mois As String

    For i = 2 To 13

    Reassureur = Worksheets("Feuil1").Cells(i, 2).Value

    Set Cell_concernée = Cells.Find(What:=Mois, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)
    Set Cell_suivante = Cells(Cell_concernée.Row, Cell_concernée.Column + 1)


    Sheets("Feuil2").Select
       
        If Cell_concernée.Activate Then
        Range(Cell_concernée, Cells(Cell_concernée.Row, Cell_concernée.Column + 5)).Interior.Color = RGB(255, 224, 0)
        Cell_suivante.Select
        Range(Cell_suivante, Cells(Cell_concernée.Row, Cell_concernée.Column + 5)).Select
        Selection.Copy
        Cell_suivante.Select
        
        Sheets("Feuil1").Select
    
            Cell_concernée.Activate
            Cell_suivante.Select
            Range(Cell_suivante, Cells(Cell_concernée.Row, Cell_concernée.Column + 5)).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
            :=False, Transpose:=False
            Cell_suivante.Select
            
        End If
    Next i
        
         
End Sub


Je vous prie de m'aider.

Merci

Message modifié par la modération
Pour une lecture plus facile du code, à l'avenir utilisez les balises, VOIR CETTE PAGE

2 réponses

yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
27 mai 2020 à 09:26
bonjour,
en vrac:
- as-tu une ligne avec
option explicit
en début de module? si non, ajoute-là.
- que contient la variable Mois? A quoi sert la variable Reassureur?
- il est recommandé d'éviter d'utiliser select et activate
- il est recommandé de toujours préciser la feuille quand on utile range et cells
- utilises des noms de variables plus clairs. il me semble que tu ignores dans quelle feuille se trouvent Cell_concernée et Cell_suivante.
0
Sigmakoff007 Messages postés 3 Date d'inscription mercredi 27 mai 2020 Statut Membre Dernière intervention 27 mai 2020
27 mai 2020 à 14:10
Rebonjour Yg_be,

Avec votre précédente réponse, j'ai pu améliorer et cela fonctionne pour une seule variable i. Merci bcp
Voici le code
Sub Test_4()

Dim Cell_concernée_Feuil2 As Range
Dim i As Integer
Dim Mois As String

i = 13

Mois = Worksheets("Feuil1").Cells(i, 2).Value

Worksheets("Feuil2").Select

Set Cell_concernée_Feuil2 = Cells.Find(What:=Mois, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)

If Not Cell_concernée_Feuil2 Is Nothing Then
Cell_concernée_Feuil2.Activate
Range(Cell_concernée_Feuil2, Cells(Cell_concernée_Feuil2.Row, Cell_concernée_Feuil2.Column + 5)).Interior.Color = RGB(255, 224, 0)
Cells(Cell_concernée_Feuil2.Row, Cell_concernée_Feuil2.Column + 1).Select
Range(Cells(Cell_concernée_Feuil2.Row, Cell_concernée_Feuil2.Column + 1), Cells(Cell_concernée_Feuil2.Row, Cell_concernée_Feuil2.Column + 5)).Select
Selection.Copy
Cells(Cell_concernée_Feuil2.Row, Cell_concernée_Feuil2.Column + 1).Select

Worksheets("Feuil1").Select

Worksheets("Feuil1").Cells(i, 3).Activate
Range(Worksheets("Feuil1").Cells(i, 3), Cells(Worksheets("Feuil1").Cells(i, 3).Row, Worksheets("Feuil1").Cells(i, 3).Column + 5)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
:=False, Transpose:=False
Worksheets("Feuil1").Cells(i, 3).Select

End If

End Sub
0
Sigmakoff007 Messages postés 3 Date d'inscription mercredi 27 mai 2020 Statut Membre Dernière intervention 27 mai 2020 > Sigmakoff007 Messages postés 3 Date d'inscription mercredi 27 mai 2020 Statut Membre Dernière intervention 27 mai 2020
27 mai 2020 à 14:20
Je viens de tester pour l'ensemble et cela fonction pour i = 2 to 13
Merci
0
Sigmakoff007 Messages postés 3 Date d'inscription mercredi 27 mai 2020 Statut Membre Dernière intervention 27 mai 2020
27 mai 2020 à 12:04
Bonjour Yg_be.

Je vous remercie pour votre réponse, j'ai tellement écris et effacé que j'ai du oublier certaines variables. Alors je vais tenir compte de vos observations et améliorer mon programme. Merci
0