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 :

Copier/Coller avec case, offset et addition


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    estimatrice
    Inscrit en
    Décembre 2024
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : estimatrice

    Informations forums :
    Inscription : Décembre 2024
    Messages : 17
    Par défaut Copier/Coller avec case, offset et addition
    Je ne suis pas encore experte dans les macros et je ne connais pas tout mais ....

    Je tente de copier des données d'un tableau vers un nouveau.

    Par contre, je dois additionné les valeurs positive dans toutes les colonnes par multiple de 5.
    Mon index de colonne est J. Donc, je dois relever les valeurs dans (J,10), (J,15), (J,20), (J,25) etc....

    Je n'arrive pas à formuler mon vba correctement on m'indique toujours qu'aucune ligne ne correspond au critères alors qu'il y a des données d'indiqu


    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    Sub OnSite()
     
     
         Dim Source As Worksheet, Cible As Worksheet, RgSource As Range, RgCible As Range
         Dim Données(), Résultats(), NewRés()
         Dim i As Long, j As Long, NbL As Long, NbC As Long
         Const NbColRés = 15
     
         Set Source = ActiveWorkbook.Worksheets("CHARGEMENT")
         Set Cible = ActiveWorkbook.Worksheets("ON SITE")
     
         Set RgSource = Source.Range("D12:BP1519") 'Plage contenant toutes les données
         Set RgCible = Cible.Range("A4")         '1ère cellule de la plage cible
     
         Application.ScreenUpdating = False
     
         'On nettoie la cible (valeurs et formats)
         RgCible.Resize(Cible.Rows.Count - RgCible.Row + 1, NbColRés).Clear
     
         'on stocke dans un tableau de variables toutes les valeurs de la plage de données
         Données = RgSource.Value2
     
         'i : Index pour de décalage en ligne de la plage cible
         i = 0
     
         For j = 1 To UBound(Données, 1)  'J varie de 1 aux nombre de lignes de la plage des données (ici 1508 lignes)
     
              If IsNumeric(Données(j, 10)) And Not IsEmpty(Données(j, 10)) Then
                   If Données(j, 10) > 0 Then
                   'Ici Données(j,10) est une valeur numérique supérieure à 0
     
                        Select Case Données(j, 10)
                            Case "(j,.Offset(5).Value)"
     
                                  i = i + 1
                                  'On redimensionne le tableau Résultats et on le remplit (au début i vaut 1)
                                  '————————————————————————————————————————————————————————————————————————————
                                  'Remarque : le tableau est en colonnes-lignes et non pas en lignes-colonnes
                                  '————————————————————————————————————————————————————————————————————————————
                                  ReDim Preserve Résultats(1 To NbColRés, 1 To i)
                                  Résultats(1, i) = Données(j, 1)
                                  Résultats(2, i) = Données(j, 2)
                                  Résultats(3, i) = Données(j, 5)
                                  Résultats(4, i) = Données(j, 4)
                                  Résultats(5, i) = Application.WorksheetFunction.Sum(Range(Données(j, 10).value & ":" & (Donnéesj.Offset(5).value)))
     
                        Case Else
                                 'Rien
                        End Select
     
                   End If
              End If
     
         Next
     
         If i = 0 Then
        MsgBox "Aucune ligne ne correspond aux critères"
        Exit Sub
     
    End If
     
         'On transpose les résultats pour passer dans un tableau en lignes, colonnes
         NbL = UBound(Résultats, 2) 'Nbre de lignes = dimension 2 du tableau Résultats
         NbC = UBound(Résultats, 1) 'Nbre de colonnes = dimension 1 du tableau Résultats
         'Nouveau tableau de Résultats
         ReDim NewRés(1 To NbL, 1 To NbC)
         'Transposition
         For i = 1 To NbL
              For j = 1 To NbC
                   NewRés(i, j) = Résultats(j, i)
              Next j
         Next i
     
         'On attribue à la plage cible redimensionnée les résultats
         RgCible.Resize(NbL, NbC).Value2 = NewRés
     
         'On se positionne juste au dessus de la cellule cible (True : avec défilement d'écran)
         Application.Goto RgCible.Offset(-1, 0), True
     
         Application.ScreenUpdating = True
     
     
    End Sub

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    959
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 959
    Par défaut
    Salut, à priori ton Select Case me semble incorrect, il attend une valeur alors que tu lui transmets une chaîne de caractères.
    Teste ceci:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Sub OnSite()
     
        Dim Source As Worksheet, Cible As Worksheet
        Dim RgSource As Range, RgCible As Range
        Dim Données As Variant, Résultats As Variant
        Dim i As Long, j As Long, NbLignes As Long, NbColRés As Long
        Dim Somme As Double
     
        Set Source = ActiveWorkbook.Worksheets("CHARGEMENT")
        Set Cible = ActiveWorkbook.Worksheets("ON SITE")
     
        Set RgSource = Source.Range("D12:BP1519") ' Données d'origine
        Set RgCible = Cible.Range("A4")          ' Destination des résultats
     
        Application.ScreenUpdating = False
     
        ' Nettoyage de la plage cible
        NbColRés = 15
        RgCible.Resize(Cible.Rows.Count - RgCible.Row + 1, NbColRés).Clear
     
        ' Charger les données dans un tableau
        Données = RgSource.Value2
        NbLignes = UBound(Données, 1)
     
        ' Tableau pour les résultats
        ReDim Résultats(1 To NbLignes, 1 To 2) ' Colonne A (ligne) + Colonne B (somme)
     
        ' Parcourir les lignes de la plage source
        Dim LigneRésultat As Long
        LigneRésultat = 1 ' Index pour remplir le tableau des résultats
     
        For i = 1 To NbLignes
            If IsNumeric(Données(i, 10)) And Données(i, 10) > 0 Then
                Somme = 0
                ' Additionner les colonnes multiples de 5 (à partir de J = 10)
                For j = 10 To UBound(Données, 2) Step 5
                    If IsNumeric(Données(i, j)) And Données(i, j) > 0 Then
                        Somme = Somme + Données(i, j)
                    End If
                Next j
     
                ' Si une somme a été calculée, on enregistre les résultats
                If Somme > 0 Then
                    Résultats(LigneRésultat, 1) = Données(i, 1) ' Première colonne (ex. ID ou info)
                    Résultats(LigneRésultat, 2) = Somme         ' Somme des colonnes multiples de 5
                    LigneRésultat = LigneRésultat + 1
                End If
            End If
        Next i
     
        ' Vérifier si des résultats existent
        If LigneRésultat = 1 Then
            MsgBox "Aucune ligne ne correspond aux critères", vbExclamation
            Exit Sub
        End If
     
        ' Réduire la taille du tableau des résultats
        ReDim Preserve Résultats(1 To LigneRésultat - 1, 1 To 2)
     
        ' Coller les résultats dans la plage cible
        RgCible.Resize(UBound(Résultats, 1), UBound(Résultats, 2)).Value = Résultats
     
        Application.ScreenUpdating = True
     
        MsgBox "Traitement terminé !", vbInformation
     
    End Sub

  3. #3
    Membre averti
    Femme Profil pro
    estimatrice
    Inscrit en
    Décembre 2024
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : estimatrice

    Informations forums :
    Inscription : Décembre 2024
    Messages : 17
    Par défaut
    Citation Envoyé par Franc Voir le message
    Salut, à priori ton Select Case me semble incorrect, il attend une valeur alors que tu lui transmets une chaîne de caractères.
    Ok et que dois-je faire pour corriger cette situation j'ai tenté plusieurs solutions mais je ne suis vraiment pas experte.

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    959
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 959
    Par défaut
    Citation Envoyé par Kitkas22 Voir le message
    Ok et que dois-je faire pour corriger cette situation j'ai tenté plusieurs solutions mais je ne suis vraiment pas experte.
    Voir ajout post #2.

  5. #5
    Membre averti
    Femme Profil pro
    estimatrice
    Inscrit en
    Décembre 2024
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : estimatrice

    Informations forums :
    Inscription : Décembre 2024
    Messages : 17
    Par défaut
    Citation Envoyé par Franc Voir le message
    Salut, à priori ton Select Case me semble incorrect, il attend une valeur alors que tu lui transmets une chaîne de caractères.
    Teste ceci:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Sub OnSite()
     
        Dim Source As Worksheet, Cible As Worksheet
        Dim RgSource As Range, RgCible As Range
        Dim Données As Variant, Résultats As Variant
        Dim i As Long, j As Long, NbLignes As Long, NbColRés As Long
        Dim Somme As Double
     
        Set Source = ActiveWorkbook.Worksheets("CHARGEMENT")
        Set Cible = ActiveWorkbook.Worksheets("ON SITE")
     
        Set RgSource = Source.Range("D12:BP1519") ' Données d'origine
        Set RgCible = Cible.Range("A4")          ' Destination des résultats
     
        Application.ScreenUpdating = False
     
        ' Nettoyage de la plage cible
        NbColRés = 15
        RgCible.Resize(Cible.Rows.Count - RgCible.Row + 1, NbColRés).Clear
     
        ' Charger les données dans un tableau
        Données = RgSource.Value2
        NbLignes = UBound(Données, 1)
     
        ' Tableau pour les résultats
        ReDim Résultats(1 To NbLignes, 1 To 2) ' Colonne A (ligne) + Colonne B (somme)
     
        ' Parcourir les lignes de la plage source
        Dim LigneRésultat As Long
        LigneRésultat = 1 ' Index pour remplir le tableau des résultats
     
        For i = 1 To NbLignes
            If IsNumeric(Données(i, 10)) And Données(i, 10) > 0 Then
                Somme = 0
                ' Additionner les colonnes multiples de 5 (à partir de J = 10)
                For j = 10 To UBound(Données, 2) Step 5
                    If IsNumeric(Données(i, j)) And Données(i, j) > 0 Then
                        Somme = Somme + Données(i, j)
                    End If
                Next j
     
                ' Si une somme a été calculée, on enregistre les résultats
                If Somme > 0 Then
                    Résultats(LigneRésultat, 1) = Données(i, 1) ' Première colonne (ex. ID ou info)
                    Résultats(LigneRésultat, 2) = Somme         ' Somme des colonnes multiples de 5
                    LigneRésultat = LigneRésultat + 1
                End If
            End If
        Next i
     
        ' Vérifier si des résultats existent
        If LigneRésultat = 1 Then
            MsgBox "Aucune ligne ne correspond aux critères", vbExclamation
            Exit Sub
        End If
     
        ' Réduire la taille du tableau des résultats
        ReDim Preserve Résultats(1 To LigneRésultat - 1, 1 To 2)
     
        ' Coller les résultats dans la plage cible
        RgCible.Resize(UBound(Résultats, 1), UBound(Résultats, 2)).Value = Résultats
     
        Application.ScreenUpdating = True
     
        MsgBox "Traitement terminé !", vbInformation
     
    End Sub


    D'accord merci beaucoup

    Il y a une erreur avec la ligne en gras et si je comprends dans ce code par contre je n'ai plus mes autres ligne de résultats?


    ' Réduire la taille du tableau des résultats
    ReDim Preserve Résultats(1 To LigneRésultat - 1, 1 To 2)

    ' Coller les résultats dans la plage cible
    RgCible.Resize(UBound(Résultats, 1), UBound(Résultats, 2)).value = Résultats

    Application.ScreenUpdating = True

    MsgBox "Traitement terminé !", vbInformation

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    959
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 959
    Par défaut
    Je me suis créé un petit tableau test et j'ai obtenu la même erreur que toi. J'ai corrigé et maintenant ça fonctionne.

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Sub OnSite()
     
        Dim Source As Worksheet, Cible As Worksheet
        Dim RgSource As Range, RgCible As Range
        Dim Données As Variant, Résultats As Variant
        Dim i As Long, j As Long, NbLignes As Long, NbColRés As Long
        Dim Somme As Double
     
        Set Source = ActiveWorkbook.Worksheets("CHARGEMENT")
        Set Cible = ActiveWorkbook.Worksheets("ON SITE")
     
        Set RgSource = Source.Range("D12:BP1519")
        Set RgCible = Cible.Range("A4")
     
        Application.ScreenUpdating = False
     
        ' Nettoyage de la plage cible
        NbColRés = 15
        RgCible.Resize(Cible.Rows.Count - RgCible.Row + 1, NbColRés).Clear
     
        ' Charger les données dans un tableau
        Données = RgSource.Value2
        NbLignes = UBound(Données, 1)
     
        ' Vérification que la plage source contient des données
        If NbLignes = 0 Or UBound(Données, 2) < 10 Then
            MsgBox "La plage source est vide ou invalide.", vbExclamation
            Exit Sub
        End If
     
        ' Tableau des résultats
        ReDim Résultats(1 To NbLignes, 1 To 2) ' Colonne A (ligne) + Colonne B (somme)
     
        ' Initialisation de l'index des résultats
        Dim LigneRésultat As Long
        LigneRésultat = 1
     
        ' Parcourir les lignes des données source
        For i = 1 To NbLignes
            Somme = 0
     
            ' Additionner les colonnes multiples de 5 (à partir de la colonne J = 10)
            For j = 10 To UBound(Données, 2) Step 5
                If IsNumeric(Données(i, j)) And Données(i, j) > 0 Then
                    Somme = Somme + Données(i, j)
                End If
            Next j
     
            ' Si une somme positive a été calculée, on enregistre les résultats
            If Somme > 0 Then
                Résultats(LigneRésultat, 1) = i
                Résultats(LigneRésultat, 2) = Somme
                LigneRésultat = LigneRésultat + 1
            End If
        Next i
     
        ' Vérification si des résultats existent
        If LigneRésultat = 1 Then
            MsgBox "Aucune ligne ne correspond aux critères.", vbExclamation
            Exit Sub
        End If
     
        ' Réduire la taille du tableau des résultats pour inclure uniquement les données valides
        ReDim Preserve Résultats(1 To LigneRésultat - 1, 1 To 2)
     
        ' Coller les résultats dans la plage cible
        RgCible.Resize(UBound(Résultats, 1), UBound(Résultats, 2)).Value = Résultats
     
        Application.ScreenUpdating = True
     
        MsgBox "Traitement*!", vbInformation
     
    End Sub

  7. #7
    Membre averti
    Femme Profil pro
    estimatrice
    Inscrit en
    Décembre 2024
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : estimatrice

    Informations forums :
    Inscription : Décembre 2024
    Messages : 17
    Par défaut
    Citation Envoyé par Franc Voir le message
    Je me suis créé un petit tableau test et j'ai obtenu la même erreur que toi. J'ai corrigé et maintenant ça fonctionne.

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Sub OnSite()
     
        Dim Source As Worksheet, Cible As Worksheet
        Dim RgSource As Range, RgCible As Range
        Dim Données As Variant, Résultats As Variant
        Dim i As Long, j As Long, NbLignes As Long, NbColRés As Long
        Dim Somme As Double
     
        Set Source = ActiveWorkbook.Worksheets("CHARGEMENT")
        Set Cible = ActiveWorkbook.Worksheets("ON SITE")
     
        Set RgSource = Source.Range("D12:BP1519")
        Set RgCible = Cible.Range("A4")
     
        Application.ScreenUpdating = False
     
        ' Nettoyage de la plage cible
        NbColRés = 15
        RgCible.Resize(Cible.Rows.Count - RgCible.Row + 1, NbColRés).Clear
     
        ' Charger les données dans un tableau
        Données = RgSource.Value2
        NbLignes = UBound(Données, 1)
     
        ' Vérification que la plage source contient des données
        If NbLignes = 0 Or UBound(Données, 2) < 10 Then
            MsgBox "La plage source est vide ou invalide.", vbExclamation
            Exit Sub
        End If
     
        ' Tableau des résultats
        ReDim Résultats(1 To NbLignes, 1 To 2) ' Colonne A (ligne) + Colonne B (somme)
     
        ' Initialisation de l'index des résultats
        Dim LigneRésultat As Long
        LigneRésultat = 1
     
        ' Parcourir les lignes des données source
        For i = 1 To NbLignes
            Somme = 0
     
            ' Additionner les colonnes multiples de 5 (à partir de la colonne J = 10)
            For j = 10 To UBound(Données, 2) Step 5
                If IsNumeric(Données(i, j)) And Données(i, j) > 0 Then
                    Somme = Somme + Données(i, j)
                End If
            Next j
     
            ' Si une somme positive a été calculée, on enregistre les résultats
            If Somme > 0 Then
                Résultats(LigneRésultat, 1) = i
                Résultats(LigneRésultat, 2) = Somme
                LigneRésultat = LigneRésultat + 1
            End If
        Next i
     
        ' Vérification si des résultats existent
        If LigneRésultat = 1 Then
            MsgBox "Aucune ligne ne correspond aux critères.", vbExclamation
            Exit Sub
        End If
     
        ' Réduire la taille du tableau des résultats pour inclure uniquement les données valides
        ReDim Preserve Résultats(1 To LigneRésultat - 1, 1 To 2)
     
        ' Coller les résultats dans la plage cible
        RgCible.Resize(UBound(Résultats, 1), UBound(Résultats, 2)).Value = Résultats
     
        Application.ScreenUpdating = True
     
        MsgBox "Traitement*!", vbInformation
     
    End Sub
    Ça ne fonctionne toujours pas de mon côté et quand je tente une autre formule pour retranscrire le tableau il ne va plus à la bonne place.

    De plus quand je tente d'ajouter les 3 autres colonne de résultat que j'avais au départ, cela ne fonctionne plus non plus...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Résultats(1, i) = Données(j, 1)
    Résultats(2, i) = Données(j, 2)
    Résultats(3, i) = Données(j, 5)
    Résultats(4, i) = Données(j, 4)
    Résultats(5, i) = Sommes Données(j, 10) offset 5

  8. #8
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    959
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 959
    Par défaut
    En relisant ton post d'origine, je pense que je me suis complètement fourvoyé!
    Ce que je fais avec la macro:
    Pour chaque ligne, j'additionne les cellules positives en partant de la colonne J et suivantes espacées de 5, donc J,O,T, etc...
    Peux-tu repréciser ? Colonne départ, fin ? Intervalle ou pas ?

  9. #9
    Membre averti
    Femme Profil pro
    estimatrice
    Inscrit en
    Décembre 2024
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : estimatrice

    Informations forums :
    Inscription : Décembre 2024
    Messages : 17
    Par défaut
    Citation Envoyé par Franc Voir le message
    En relisant ton post d'origine, je pense que je me suis complètement fourvoyé!
    Ce que je fais avec la macro:
    Pour chaque ligne, j'additionne les cellules positives en partant de la colonne J et suivantes espacées de 5, donc J,O,T, etc...
    Peux-tu repréciser ? Colonne départ, fin ? Intervalle ou pas ?
    Bonjour

    Ma colonne de départ étant la colonne D. Les colonnes de référence qui doit avoir un nombre positif pour être copier sont les (M, R, W, AB, AG, AL.....).. C'est pourquoi je mettais un offset de 5.
    Dans mon script le "j" est uniquement un indice de référence, Données(j,10) étant le départ à la colonne D que je décale de 10 cellules.
    Mon script de base fonctionne quand je mets juste une colonne "load".
    C'est quand j'essaie de le modifié pour ajouter toutes les colonnes "load" que cela ne fonctionne plus.


    Je ne peux pas transférer mon fichier intégral car il est trop lourd.
    Je vous partage donc une image.
    Je veux mettre dans un tableau les données qui contiennes de l'information dans les colonnes loads.

    Je veux que mon tableau résultat donne ceci comme information si on ce base sur les informations de ma feuille de départ

    (Colonne D, Colonne E, Colonne H, Colonne G, Somme des colonnes (M, R, W, AB,.....)Nom : LOAD.PNG
Affichages : 44
Taille : 351,4 Ko


    Je ne sais pas si c'est plus clair ainsi.

  10. #10
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    959
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 959
    Par défaut
    Je ne sais pas si je suis le seul, mais je n'arrive pas à suivre tes explications. Sur ton image, pourrais-tu entourer en rouge, les cellules qui doivent être additionnées, et en vert, la cellule qui doit recevoir le résultat ?
    2 ou 3 lignes devraient suffire pour comprendre le traitement à effectuer.

  11. #11
    Membre averti
    Femme Profil pro
    estimatrice
    Inscrit en
    Décembre 2024
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : estimatrice

    Informations forums :
    Inscription : Décembre 2024
    Messages : 17
    Par défaut
    Citation Envoyé par Franc Voir le message
    Je ne sais pas si je suis le seul, mais je n'arrive pas à suivre tes explications. Sur ton image, pourrais-tu entourer en rouge, les cellules qui doivent être additionnées, et en vert, la cellule qui doit recevoir le résultat ?
    2 ou 3 lignes devraient suffire pour comprendre le traitement à effectuer.
    Ok je recommence de base ce code fonctionne.
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    Sub OnSite()
     
     
         Dim Source As Worksheet, Cible As Worksheet, RgSource As Range, RgCible As Range
         Dim Données(), Résultats(), NewRés()
         Dim i As Long, j As Long, NbL As Long, NbC As Long
         Const NbColRés = 10
     
         Set Source = ActiveWorkbook.Worksheets("CHARGEMENT")
         Set Cible = ActiveWorkbook.Worksheets("ON SITE")
     
         Set RgSource = Source.Range("D12:BB1519") 'Plage contenant toutes les données
         Set RgCible = Cible.Range("A6")         '1ère cellule de la plage cible
     
         Application.ScreenUpdating = False
     
         'On nettoie la cible (valeurs et formats)
         RgCible.Resize(Cible.Rows.Count - RgCible.Row + 1, NbColRés).Clear
     
         'on stocke dans un tableau de variables toutes les valeurs de la plage de données
         Données = RgSource.Value2
     
         'i : Index pour de décalage en ligne de la plage cible
         i = 0
     
         For j = 1 To UBound(Données, 1)  'J varie de 1 aux nombre de lignes de la plage des données (ici 1508 lignes)
     
              If IsNumeric(Données(j, 10)) And Not IsEmpty(Données(j, 10)) Then
                   If Données(j, 10) > 0 Then
                        'Ici Données(j, 10) est une valeur numérique supérieure à 0
     
                                  'On incrémente i pour le prochain résultat
                                  i = i + 1
                                  'On redimensionne le tableau Résultats et on le remplit (au début i vaut 1)
                                  '————————————————————————————————————————————————————————————————————————————
                                  'Remarque : le tableau est en colonnes-lignes et non pas en lignes-colonnes
                                  '————————————————————————————————————————————————————————————————————————————
                                  ReDim Preserve Résultats(1 To NbColRés, 1 To i)
                                  Résultats(1, i) = Données(j, 1)
                                  Résultats(2, i) = Données(j, 2)
                                  Résultats(3, i) = Données(j, 5)
                                  Résultats(4, i) = Données(j, 4)
                                  Résultats(5, i) = Données(j, 10)
     
                   End If
              End If
         Next
     
         If i = 0 Then
        MsgBox "Aucune ligne ne correspond aux critères"
        Exit Sub
     
    End If
     
         'On transpose les résultats pour passer dans un tableau en lignes, colonnes
         NbL = UBound(Résultats, 2) 'Nbre de lignes = dimension 2 du tableau Résultats
         NbC = UBound(Résultats, 1) 'Nbre de colonnes = dimension 1 du tableau Résultats
         'Nouveau tableau de Résultats
         ReDim NewRés(1 To NbL, 1 To NbC)
         'Transposition
         For i = 1 To NbL
              For j = 1 To NbC
                   NewRés(i, j) = Résultats(j, i)
              Next j
         Next i
     
         'On attribue à la plage cible redimensionnée les résultats
         RgCible.Resize(NbL, NbC).Value2 = NewRés
     
         'On se positionne juste au dessus de la cellule cible (True : avec défilement d'écran)
         Application.Goto RgCible.Offset(-1, 0), True
     
         Application.ScreenUpdating = True
     
     
    End Sub
    Il me permets de transcrire les données de cette façon dans une nouvelle page "on site" comme ci-dessous.
    Nom : onsite.PNG
Affichages : 86
Taille : 127,8 Ko

    Ce que j'aimerais c'est modifier cette section du 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
    For j = 1 To UBound(Données, 1)  'J varie de 1 aux nombre de lignes de la plage des données (ici 1508 lignes)
     
              If IsNumeric(Données(j, 10)) And Not IsEmpty(Données(j, 10)) Then
                   If Données(j, 10) > 0 Then
                        'Ici Données(j, 10) est une valeur numérique supérieure à 0
     
                                  'On incrémente i pour le prochain résultat
                                  i = i + 1
                                  'On redimensionne le tableau Résultats et on le remplit (au début i vaut 1)
                                  '————————————————————————————————————————————————————————————————————————————
                                  'Remarque : le tableau est en colonnes-lignes et non pas en lignes-colonnes
                                  '————————————————————————————————————————————————————————————————————————————
                                  ReDim Preserve Résultats(1 To NbColRés, 1 To i)
                                  Résultats(1, i) = Données(j, 1)
                                  Résultats(2, i) = Données(j, 2)
                                  Résultats(3, i) = Données(j, 5)
                                  Résultats(4, i) = Données(j, 4)
                                  Résultats(5, i) = Données(j, 10)
    Pour me permettre d'additionnée des données à la colonne " Résultats(5, i) = Données(j, 10)" J'aimerais avoir une somme de toutes les colonnes " load" (en rouge dans l'image)" soit une formule qui me permets d'avoir " Résultats(5, i) = somme des Données(j, 10)+ offset 5....."

    Je sais que pour ça je dois ajouter un case ou une incrémentation avant d'arriver au résultat mais je ne sais pas comment l'insérer dans cette section du code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
              If IsNumeric(Données(j, 10)) And Not IsEmpty(Données(j, 10)) Then
                   If Données(j, 10) > 0 Then  
                        'Ici Données(j, 10) est une valeur numérique supérieure à 0

    En rouge, les colonnes que je veut additionné, si les cellules contiennent quelque chose
    En bleu, ce sont les autres informations qui doivent apparaître dans mon tableau lorsqu'il y a quelque chose dans la colonne load.

    Nom : LOAD1.PNG
Affichages : 84
Taille : 1,37 Mo

    Finalement, dans mon tableau de résultats "on site". J'aimerais que la colonne quantity contiennent la somme de mes colonnes " loads" (en rouge)

Discussions similaires

  1. Copier/coller avec barre de progression
    Par TicTac75 dans le forum VBA Access
    Réponses: 5
    Dernier message: 21/06/2015, 17h41
  2. Problemes avec copier/coller avec VI
    Par fgalves dans le forum Linux
    Réponses: 7
    Dernier message: 06/01/2009, 16h43
  3. copier-coller avec listbox
    Par LeNeutrino dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/01/2007, 14h06
  4. Fonction copier/coller avec un menu
    Par avogadro dans le forum Langage
    Réponses: 3
    Dernier message: 16/03/2006, 23h44
  5. copier coller avec Pastespecial en VBA
    Par stormless dans le forum Général VBA
    Réponses: 1
    Dernier message: 06/11/2005, 12h59

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