Par rapport à un exercice VBA

Donc pour calculer le montant total dans la cellule D4, je dois additionner les valeurs dans la colonne D du classeur GAB01, étant donné que celui-ci a été fermé, alors les données de ce classeur correspondent à la plage de cellule situées entre la cellule A2 et la cellule A187 (en d'autre termes c'est la cellule qui précède la cellule dont la valeur est 1)

Ainsi les données du classeur A2 sont les données comprises entre la Cellule A188 ( la cellule dans laquelle il y'a la valeur 1) et une cellule qui précède une autre cellule dont la valeur est aussi 1

j'espère que vous comprenez

cordialement

Bonjour

Le prof ne sait pas que PowerQuery existe et fait cela sans coder ?

On utilise vba, donc il nous a demandé de le faire sur vba.

Cordialement

Bonjour,

Le gars vient comme une fleur pour qu'on fasse son boulot, ne prend pas la peine de poster le moindre morceau de code, vous pisse dessus à chaque réponse en disant "ouais j'avais un code pour ça, mais admettons, ton truc peut aller..." et vous continuez à aider...

Chapeau...

Bonjour,

déjà, à la base, lui donner du tout cuit n'est pas lui rendre service, c'est l'enfoncer dans ses lacunes..
Perso dans ce cas, je me contente de guider. Et encore, à condition qu'il montre un minimum d'intérêt à vouloir faire et comprendre.
eric

On est d'accord, j'ai utilisé le mot "aider" à très mauvais escient.

Ceci n'aide absolument personne.

@eriiic, et si Loic était golfeur, tu ferais un effort supplémentaire ? 😋

Bonjour à toutes et tous,

@Loic007

Bon je vois que ce que j'ai fais ne convient pas, sans explications et sans même dire pourquoi, je retire donc la solution proposée.

Édit: Salut 78chris, eriiic, JoyeuxNoel.

Bonjour

ca fait des jours je reflechis à comment faire une boucle qui va me copier les données comprise entre une cellule dont la valeur est de 1 et une cellule précèdent une cellule donc la valeur est 1.

J’ai mis que 4 classeurs sinon le travail est à faire sur 40 classeurs.

Je ne vous demande pas du tout cui sinon j’aurais mis tous les 40 classeurs ici, je veux juste de l’aide .

j’ai les idées en tête sauf que j’arrive pas à les mettre sous forme de code
Cordialement

Bonjour

Voici les deux codes que vous pouvez utiliser. J'ai modifié un peu le premier proposé

Sub test()
Dim Chemin As String
Dim i As Byte
Dim dlgS As Long, dlgD As Long

Chemin = ThisWorkbook.Path & "\"

For i = 1 To 4
    If i < 10 Then
        Workbooks.Open Filename:=Chemin & "gab-0" & i & ".xlsx"
    Else: Workbooks.Open Filename:=Chemin & "gab-" & i & ".xlsx"
    End If
    With ActiveWorkbook.Sheets("Operation")
        dlgS = .Range("A" & .Rows.Count).End(xlUp).Row
        dlgD = ThisWorkbook.Sheets("Données").Range("A" & ThisWorkbook.Sheets("Données").Rows.Count).End(xlUp).Row + 1
        .Range("A2:F" & dlgS).Copy ThisWorkbook.Sheets("Données").Range("A2:F" & dlgD)

    End With

    Call report
    ActiveWorkbook.Close

Next i
End Sub

Le deuxième pour la feuille Reporting

Sub report()
Dim ligR As Long, dlgS As Long
'Dim zero As Integer

ligR = ThisWorkbook.Sheets("Reporting GAB").Range("B" & Rows.Count).End(xlUp).Row + 1
dlgS = ActiveWorkbook.Sheets("Operation").Range("A" & Rows.Count).End(xlUp).Row

With ThisWorkbook.Sheets("Reporting GAB")
    .Range("A" & ligR) = "01"
    .Range("B" & ligR) = Split(ActiveWorkbook.Name, ".")(0)
    .Range("C" & ligR) = WorksheetFunction.Count(ActiveWorkbook.Sheets("Operation").Range("D2:D" & dlgS))
    .Range("D" & ligR) = WorksheetFunction.Sum(ActiveWorkbook.Sheets("Operation").Range("D2:D" & dlgS))
    .Range("E" & ligR) = WorksheetFunction.Average(ActiveWorkbook.Sheets("Operation").Range("D2:D" & dlgS))
    .Range("F" & ligR) = WorksheetFunction.Min(ActiveWorkbook.Sheets("Operation").Range("D2:D" & dlgS)) 'ligne si 0 inclus
    'zero = WorksheetFunction.CountIf(ActiveWorkbook.Sheets("Operation").Range("D2:D" & dlgS), 0) + 1 'ligne si 0 exclus
    '.Range("F" & ligR) = WorksheetFunction.Small(ActiveWorkbook.Sheets("Operation").Range("D2:D" & dlgS), zero)'ligne si 0 exclus
    .Range("G" & ligR) = WorksheetFunction.Max(ActiveWorkbook.Sheets("Operation").Range("D2:D" & dlgS))
    .Range("H" & ligR) = WorksheetFunction.CountIf(ActiveWorkbook.Sheets("Operation").Range("F2:F" & dlgS), "Non Aboutie")
End With
End Sub

A voir si c'est ce que vous cherchiez au final

Cordialement

Rebonjour (je me permets de souhaiter le bonjour, même si j'ai bien compris que ce n'était pas l'habitude sur ce post ...)

@ Dan :

J'avais tendance à faire comme toi avant :

For i = 1 To 4
    If i < 10 Then
        Workbooks.Open Filename:=Chemin & "gab-0" & i & ".xlsx"
    Else: Workbooks.Open Filename:=Chemin & "gab-" & i & ".xlsx"
    End If

Pour éviter les si, on ne pourrait pas remplacer par ça ?

For i = 1 To 40
    Workbooks.Open Filename:=Chemin & "gab-" & format(i, "00") & ".xlsx"

Bonjour

Sub yf()
Dim monclasseur As String, i As Integer, y As Integer, output As Range

monclasseur = Dir("Chemin\*.xlsx")
Workbooks.Open ("Chemin\Reporting.xlsx")

While monclasseur <> ""
Workbooks.Open ("Chemin\" & monclasseur)
'instruction avant de copier les données
i = ActiveSheet.UsedRange.Rows.Count
ActiveWorkbook.Sheets("Operation").Range(Cells(2, 1), Cells(Cells(2, 1).End(xlDown).Row, Cells(2, 1).End(xlToRight).Column)).Copy
Workbooks("Reporting.xlsx").Sheets(1).Activate
y = ActiveSheet.Range("A1").CurrentRegion.Rows.Count
Workbooks("Reporting.xlsx").Sheets(1).Cells(y + 1, 1).PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
Workbooks.Open("Chemin\" & monclasseur).Close (0)
monclasseur = Dir
Wend
End Sub

Voila le code que j'ai moi même rédigé pour le premier volet de la question et il marche, ca fait 5 jours que je l'ai fait. Et depuis ce jour, je suis bloqué au niveau du deuxième volet de la question. Je reflechis mais j'arrive toujours pas à avoir le code dont j'ai besoin

Je suis débutant, il y'a deux semaines je savais même pas qu'on pouvait faire de la programmation dans Excel.

Je vous prie de bien vouloir m'aider

Cordialement

Re

Je suis débutant, il y'a deux semaines je savais même pas qu'on pouvait faire de la programmation dans Excel.

Ben vous avez de la chance car après deux semaines je n'étais pas capable de faire ce genre de code.

je viens de vous proposer les codes. Vous voulez quoi finalement ?

@JoyeuxNoel :

Pour éviter les si, on ne pourrait pas remplacer par ça ?

For i = 1 To 40

Workbooks.Open Filename:=Chemin & "gab-" & format(i, "00") & ".xlsx"

Oui cette solution est meilleure on évite une ligne. je n'y pensais plus ou plutot je l'avais oubliée

Bonjour @Dan

Merci pour le code je vais l'essayer

cordialement

Re,

Au fait, je dois copier les données de chaque classeur GAB les un à la suite des autres.( j'ai déjà un code et ca marche)

Voila le code que j'ai moi même rédigé pour le premier volet de la question et il marche, ca fait 5 jours que je l'ai fait.

OK. Pourquoi vous me demandez de l'aide sur le point 1 alors ? Votre code posté dont vous dites qu'il fonctionne depuis 5 jours va vous renvoyer un bug.

Là je vous ai aidé sans vous aider car comme je vous avais posé la question au départ au sujet de l'"exercice scolaire" ( de recherche selon votre réponse) le fait de vous donner une réponse toute faite peut ne pas vous aider à votre apprentissage VBA.

Pour avoir aidé mon fils en supérieur, je ne comprends d'ailleurs pas que l'on vous demande un tel exercice en VBA pour démarrer...si c'est le cas...

Donc pour calculer le montant total dans la cellule D4, je dois additionner les valeurs dans la colonne D du classeur GAB01, étant donné que celui-ci a été fermé, alors les données de ce classeur correspondent à la plage de cellule situées entre la cellule A2 et la cellule A187 (en d'autre termes c'est la cellule qui précède la cellule dont la valeur est 1)

Ainsi les données du classeur A2 sont les données comprises entre la Cellule A188 ( la cellule dans laquelle il y'a la valeur 1) et une cellule qui précède une autre cellule dont la valeur est aussi 1

j'espère que vous comprenez

cordialement

Je pue vraiment de la gueule dans cette histoire.

Il me semble que ce que j'avais proposé remplissait ces conditions, je pense aussi que cela n'a même pas été tester par l'auteur de la demande.

Bon courage !

Mais non md100, nous on t'aime bien.

C'est juste qu'à priori, ce n'était pas la peine de répondre

@JoyeuxNoel,

Oufff, je suis rassuré, je vais sécher mes larmes , Je m'adressais à l'auteur de la demande cela dit.

Cdlt.

J'avais bien compris. Mais je crois que t'as plus de chances d'avoir une réponse de ma part que de la sienne vu comme c'est parti

@JoyeuxNoel,
Ça c'est sûr, j'aurai dû m'abstenir sur ce coup là.
Cdlt

au fait, le classeur xlsm que vous m'avez envoyé je n'arrive pas à appliquer ca à mon dossier

j'essaie de comprendre aussi le code mais je n'y arrive pas

cordialement

Rechercher des sujets similaires à "rapport exercice vba"