Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Comment remplacer For Each xOng pour un choix d'onglets et de colonnes ...

  • Initiateur de la discussion Initiateur de la discussion Xplorer
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Xplorer

XLDnaute Nouveau
Bonjour ! s'il vous plait, dans le principe, auriez-vous une idée de ce qu'il faudrait utiliser comme formules, pour appliquer une boucle non pas à tous les onglets
et colonnes d'un classeur, via "For Each xOng" , mais à certaines colonnes choisies, d'onglets choisis ... par exemple .... feuille 1 et feuille 2, colonnes D, G, H .... ?

Merci !
 
Bonsoir Xplorer,

Utilisez 2 tableaux :

f = Array("Feuil1", "Feuil2")

col = Array("D", "G", "H")

et faites 2 boucles imbriquées sur les éléments de f et de col.

A+
merci beaucoup !

Je suis en train de me dire que je me suis peut-être trompé dans ma demande. J'essaye d'analyser et mieux comprendre le code écrit par lolotte 83 qui m'a bien aidé.

C'était peut-être pas "for each" .... For each ici a l'air de faire une recherche dans tout le classeur, pour des onglets s'appelant "Cat1", pour y travailler.

Mais ce qu'il se passe dans Cat1 suppose une analyse de tous les onglets et colonnes : c'est ces onglets ci, et colonnes que je voudrais mieux définir.

dans cette portion de code :

Select Case xOng.Name
Case Is <> "CAT1", "macros"
With Sheets(xOng.Name)


.... je devrais peut-être rajouter Case Is <> "feuille1", "feuille2" .... ou plutôt :
Case is <>
f = Array("Feuil1", "Feuil2")
col = Array("D", "G", "H")

?

Voilà le code dans son ensemble :

Sub TEST_XPLORER()
Dim xTablo()
xPreLig = 10
xDerLig = 200
xCpt = 0
With Sheets("CAT1")
.Range("C7:C100").ClearContents
End With
For Each xOng In ThisWorkbook.Sheets
Select Case xOng.Name
Case Is <> "CAT1", "macros"
With Sheets(xOng.Name)
For F = 1 To 50
For Each xCell In .Range(.Cells(xPreLig, F * 1), .Cells(xDerLig, F * 1))
If xCell.Offset(0, 1) = 1 Then
xCpt = xCpt + 1
ReDim Preserve xTablo(1 To xCpt)
xTablo(xCpt) = xCell.Value
End If
Next xCell
Next F
End With
End Select
Next xOng
With Sheets("CAT1")
For F = 1 To UBound(xTablo)
.Range("C" & 7 + F) = xTablo(F)
Next F
End With
End Sub
 
Bonsoir,

VB:
Sub TEST_XPLORER()
Dim xTablo()
xPreLig = 10
xDerLig = 200
xCpt = 0
    With Sheets("Feuil1")
        .Range("C7:C100").ClearContents
    End With
    For Each xOng In ThisWorkbook.Sheets
        Select Case xOng.Name
            Case Is <> "Feuil1", "Feuil2"
                With Sheets(xOng.Name)
                Col = Array("D", "G", "H")
                    For F = LBound(Col) To UBound(Col)
                        For Each xCell In .Range(.Cells(xPreLig, .Range(Col(F) & "1").Column), .Cells(xDerLig, .Range(Col(F) & "1").Column))
                            If xCell.Offset(0, 1) = 1 Then
                                xCpt = xCpt + 1
                                ReDim Preserve xTablo(1 To xCpt)
                                xTablo(xCpt) = xCell.Value
                            End If
                        Next xCell
                    Next F
                End With
        End Select
    Next xOng
    With Sheets("Feuil1")
        For F = 1 To UBound(xTablo)
            .Range("C" & 7 + F) = xTablo(F)
        Next F
    End With
End Sub
 
Bonsoir ! merci 🙂

Si je compare :

For Each xOng In ThisWorkbook.Sheets
Select Case xOng.Name
Case Is <> "CAT1", "macros"
With Sheets(xOng.Name)

avec :

For Each xOng In ThisWorkbook.Sheets
Select Case xOng.Name
Case Is <> "Feuil1", "Feuil2"
With Sheets(xOng.Name)
Col = Array("D", "G", "H")
For F = LBound(Col) To UBound(Col)
For Each xCell In .Range(.Cells(xPreLig, .Range(Col(F) & "1").Column), .Cells(xDerLig, .Range(Col(F) & "1").Column))


dans mon cas, "Cat1" et "macros" , remplacées dans votre cas par "Feuil1" et feuil2" , sont justement des onglets que je n'ai pas besoin de mieux définir, c'est tous les autres onglets qui sont analysés et repris dans "Cat1" que je dois mieux cerner.
Difficile à expliquer
 
Bonjour Xplorer, laurent950,

Pour ne pas traiter les feuilles listées dans le tableau f :
VB:
Dim f, col, w As Worksheet
f = Array("Feuil1", "Feuil2") 'à adapter
col = Array("D", "G", "H")
For Each w In Worksheets
    If IsError(Application.Match(w.Name, f, 0)) Then
        'suite du code
    End If
Next w
A+
 

Bonjour ! Merci beaucoup Laurent.

Ca signifie que ça exclue les feuilles 1 et 2, leurs colonnes D,G,H, pour ne travailler uniquement sur le reste ?

J'ai essayé d'inclure votre code dans celui que j'ai, mais je dois mal m'y prendre, ça ne fonctionne pas encore :

VB:
Sub TEST_XPLORER()
Dim f, col, w As Worksheet
f = Array("TEMPS 1", "TEMPS 2")                                  'à adapter
col = Array("E", "F")
For Each w In Worksheets
    If IsError(Application.Match(w.Name, f, 0)) Then
                                                                       'suite du code
    End If
Next w
    Dim xTablo()
    xPreLig = 10                         'Première ligne à tester
    xDerLig = 200                        'Dernière ligne à tester
    xCpt = 0                            'Compteur à zéro (utile pour le tableau virtuel)
    With Sheets("CAT1")                                                                       'On travaille sur l'onglet REPERTOIRE
        .Range("C7:C100").ClearContents                                                             'On efface les anciennes données (Ici C5:C100)
    End With
    For Each xOng In ThisWorkbook.Sheets                                                            'On boucle sur tous les onglets du classeur
        Select Case xOng.Name                                                                       'On récupère le nom de chaque onglet
            Case Is <> "CAT1", "macros"                                                        'Si Nom<>Répertoire ou Nom<>Liste
                With Sheets(xOng.Name)                                                              'On travaille dans l'onglet
                    For f = 1 To 50                                                                  'On boucle 2x (Car 2 tableaux)
                        For Each xCell In .Range(.Cells(xPreLig, f * 1), .Cells(xDerLig, f * 1))    'On boucle le tableau
                            If xCell.Offset(0, 1) = 1 Then                                          'Si la cellule de droite=1
                                xCpt = xCpt + 1                                                     'On rajoute 1 au compteur
                                ReDim Preserve xTablo(1 To xCpt)                                    'On redimentionne le tableau virtuel incrémenté du compteur
                                xTablo(xCpt) = xCell.Value                                          'On inscrit la valeur d ela cellule dans un tableau virtuel
                            End If                                                                  'Fin Si
                        Next xCell                                                                  'Fin Boucle
                    Next f                                                                          'Fin Boucle
                End With                                                                            'Fin travail sur l'onglet
        End Select
    Next xOng                                                                                       'Fin Boucle
    With Sheets("CAT1")                                                                             'On travaille sur l'onglet REPERTOIRE
        For f = 1 To UBound(xTablo)                                                                 'On boucle sur toutes les valeurs du tableau virtuel
            .Range("C" & 7 + f) = xTablo(f)                                                         'On inscrit a/c de la cellule C7 le résultat du tableau virtuel
        Next f                                                                                      'Fi boucle
    End With                                                                                        'Fin travail sur l'onglet
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…