Bonjour, je suis nouveau sur le forum et je débute la programmation. J'ai fait un code très sommaire (et assez maladroit je pense vu mon niveau) qui devrait me permettre d'aller chercher des cellules dans un classeur préalablement sélectionné par l'utilisateur.

le classeur source est toujours du même format, les onglets et les cellules reste les même, seul le nom et la localisation change (en fonction du mois)

Chaque onglet représente un jour du mois et le nom est le numéro du jour (1,2,3...). Chaque onglet contient 3 tableaux représentant les commentaires de chaque chef d'équipe (3 équipes par jour).

Pour l’analyse j'ai besoin de venir mettre des information les unes à la suite des autres alors je procédé par étape (précisés dans la macro).

Mais voila pour ce faire j'ai besoin de faire appel à une boucle qui va venir extraire les données page par page (de 1 à 31).
Sauf que quand je teste le programme sans la boucle avec un numéro d'onglet au hasard cela fonctionne bien mais quand j'incrémente une variable dans le numéro d'onglet avec la boucle "do loop" , plus rien, le programme se termine mais aucune données.

Je pense que l'erreur ne doit pas être très grosse mais j'ai cherché par tout et pas moyen de trouver d'ou cela vient. (encore désolé pour l'écriture de ce programme je pense que certains experts vont être choqués )

Voila le programme :

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
Sub ChoixFichier()
    'déclaration des variables
    Dim Fichier As String 'chemin du fichier
    Dim shA As Worksheet 'Feuille A
    Dim wB As Workbook 'Classeur
    Dim lignevide As Integer 'numero 1ere ligne vide
    Dim feuille As Integer 'numéro de boucle (attention bien mettre string et non integer)
 
 
    appel = MsgBox("Cette opération va aboutir à l'extration du rapport Tubing que vous allez selectionner", vbOKCancel + vbInformation, "Attention extration")
    If appel = vbOK Then 'demande à l'utilisateur s'il est sur de vouloir poursuivre et l'informe de ce que le programme va executer
 
    lignevide = Empty 'vide la variable qui trouve la premiere ligne vide
 
    feuille = 1 'commence à l'onglet jour 1
 
    Fichier = Application.GetOpenFilename("Tous les fichiers (*.*),*.*") 'Affiche la boîte de dialogue "Ouvrir" et ouvre le fichier selectionné
    Application.DisplayAlerts = False 'désactive les boites de dialogue
    Set shA = Sheets("data") 'active l'onglet data
    Set wB = Workbooks.Open(Filename:=Fichier) 'active le fichier que l'on va extraire
 
    Do 'début de la boucle
    'poste 1
        Set shA = Sheets("data") 'active l'onglet data
        lignevide = Cells(Rows.Count, "a").End(xlUp).Row + 1 'donne le numero de la premiere ligne vide
        Set wB = Workbooks.Open(Filename:=Fichier) 'active le fichier que l'on va extraire
        shA.Range(("B" & lignevide), ("H" & lignevide + 27)).Value = wB.Sheets(feuille).Range("c41:i68").Value 'copie la plage
        wB.Close False ' ferme sans sauve
        Set wB = Nothing
        Set shA = Nothing
    'poste2
        Set shA = Sheets("data") 'active l'onglet data
        lignevide = Cells(Rows.Count, "a").End(xlUp).Row + 1 'donne le numero de la premiere ligne vide
        Set wB = Workbooks.Open(Filename:=Fichier) 'active le fichier que l'on va extraire
        shA.Range(("B" & lignevide), ("H" & lignevide + 27)).Value = wB.Sheets(feuille).Range("j41:p68").Value 'copie la plage
        wB.Close False ' ferme sans sauve
        Set wB = Nothing
        Set shA = Nothing
    'poste 3
        Set shA = Sheets("data") 'active l'onglet data
        lignevide = Cells(Rows.Count, "a").End(xlUp).Row + 1 'donne le numero de la premiere ligne vide
        Set wB = Workbooks.Open(Filename:=Fichier) 'active le fichier que l'on va extraire
        shA.Range(("B" & lignevide), ("H" & lignevide + 27)).Value = wB.Sheets(feuille).Range("q41:w68").Value 'copie la plage
        wB.Close False ' ferme sans sauve
        Set wB = Nothing
        Set shA = Nothing
 
        feuille = feuille + 1 'passage à l'onglet suivant
 
    Loop While feuille = 31 'condition de fin de boucle
 
 
 
        Set wB = Nothing
        Set shA = Nothing
 
    Application.DisplayAlerts = True 'réactive les boites de dialogue
 
    MsgBox "Términé !" 'message qui confirme la fin de l'execution
 
    End If
 
End Sub