Je suis en train de boucler un dictionnaire et de le sortir sur la feuille active les 2 premières images, puis je crée une feuille supplémentaire pour les deux suivantes et ainsi de suite. Je veux seulement 2 images sur chaque feuille en fonction du nombre d'images peut-être dans le dictionnaire. J'ai besoin d'aide sur la logique car je ne sais pas comment coder la boucle pour ne mettre que 2 images après avoir ajouté les 2 premières à la feuille active.

Voici le code:

Dim PictureFilename As Variant
Dim FileList As Dictionary
....
For Each PictureFilename In FileList
    i = i + 1
    If i >2 then
        TabName = DefaultWorksheetNameAdder + " " + Format(Now(), "mm-dd-yyyy")
        PicWorkbook.Sheets.Add(after:=PicWorkbook.Sheets(PicWorkbook.Sheets.Count)).Name = "NewSheet"
        Set PicWorksheet = PicWorkbook.Sheets(PicWorkbook.Sheets.Count)

        'how to handle the next two without having to code i > 4 , i > 6 ect.?
    Else
        Set Photo = PicWorksheet.Shapes.AddPicture(CStr(PictureFilename), msoFalse, msoCTrue, 1, 1, -1, -1)
        Set pic = Nothing
        Set pic = Photo
        colPictures.Add pic
    End If
Next
0
ThisGuyJustNeedsHelp 23 mai 2018 à 18:05

3 réponses

Meilleure réponse

Mod est votre ami ici. J'ai restructuré votre code un peu, mais cela devrait vous donner ce dont vous avez besoin:

Dim PictureFilename As Variant
Dim FileList As Dictionary

i = 0

For Each PictureFilename In FileList
    i = i + 1

    If i > 2 And i Mod 2 = 1 Then
       TabName = DefaultWorksheetNameAdder + " " + Format(Now(), "mm-dd-yyyy")
       PicWorkbook.Sheets.Add(after:=PicWorkbook.Sheets(PicWorkbook.Sheets.Count)).Name = "NewSheet"
       Set PicWorksheet = PicWorkbook.Sheets(PicWorkbook.Sheets.Count)
    End If

    Set Photo = PicWorksheet.Shapes.AddPicture(CStr(PictureFilename), msoFalse, msoCTrue, 1, 1, -1, -1)
    Set pic = Nothing
    Set pic = Photo
    colPictures.Add pic
Next
0
Brian M Stafford 23 mai 2018 à 16:03

Est-ce que cela fonctionnera pour vous?

Dim PictureFilename As Variant
Dim FileList As Dictionary
....
i = 0
For Each PictureFilename In FileList '''Assuming you have a worksheet already.
    If i > 1 then
        TabName = DefaultWorksheetNameAdder + " " + Format(Now(), "mm-dd-yyyy")
        PicWorkbook.Sheets.Add(after:=PicWorkbook.Sheets(PicWorkbook.Sheets.Count)).Name = "NewSheet"
        Set PicWorksheet = PicWorkbook.Sheets(PicWorkbook.Sheets.Count)
        i = 0
    Else
        Set Photo = PicWorksheet.Shapes.AddPicture(CStr(PictureFilename), msoFalse, msoCTrue, 1, 1, -1, -1)
        Set pic = Nothing
        Set pic = Photo
        colPictures.Add pic
        i = i + 1
    End If
Next
0
Brian 23 mai 2018 à 15:34

Découvrez MOD.

if i MOD 2 = 0 then...

MOD produit le modulo d'un nombre.

0 MOD 2 vaut 0

1 MOD 2 vaut 1

2 MOD 2 vaut 0

3 MOD 2 vaut 1

4 MOD 2 vaut 0

0
CLR 23 mai 2018 à 15:14