Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

bloublou

XLDnaute Occasionnel
Bonjour au forum,

J'ai besoin d'aide pour finaliser une macro de copier coller
Je copie colle 3 plages de données sur une seule feuille
Je n'arrive pas à interdire à Excel de prendre des données sur des onglets qui commecent par la lettre O

Dans un 2 ieme temps je souhaiterais rajouter une donnée dans chaque tableau copié au bout à partir de la cellule D25de chaque feuille

Voici le code :

Sub FamilleF()
Dim WS As Worksheet

For Each WS In Worksheets
If WS.Name <> "RAF" And WS.Name <> "RAS" And WS.Name <> "Babou" Then
'If Left(WS.Name, 1) = 'O';
'Comment faire pour intégrer une autre condition afin que toutes les feuilles
'qui commencent par O ne soient pas pris en compte dans le copier coller ???

With WS
.Range("B31:M38").Copy Sheets("Recap").Cells(Rows.Count, 2).End(3)(2)

End With
End If
Next WS

End Sub

J'ai mis un fichier un PJ

Merci de votre aide

BlouBlou
 

Pièces jointes

  • La Famille Foldingue.xlsm
    26.5 KB · Affichages: 54

NezQuiCoule

XLDnaute Occasionnel
Re : Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

Bonjour,

Le code est bon, il suffit de décommenter votre ligne et de remplacer "=" par "<>" signifiant différent de.

Sub FamilleF()
Dim WS As Worksheet

For Each WS In Worksheets
If WS.Name <> "RAF" And WS.Name <> "RAS" And WS.Name <> "Babou" Then
If Left(WS.Name, 1) <> "O" Then
'Comment faire pour intégrer une autre condition afin que toutes les feuilles
'qui commencent par O ne soient pas pris en compte dans le copier coller ???

With WS
.Range("B31:M38").Copy Sheets("Recap").Cells(Rows.Count, 2).End(3)(2)

End With
End With
End If
Next WS

End Sub
 

camarchepas

XLDnaute Barbatruc
Re : Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

Bonsoir Nezquicoule,Bloublou,

J'ai fait , je poste

Code:
Sub FamilleF()
 Dim WS As Worksheet
 Dim LigneFin As Long
 
 For Each WS In Worksheets
  With WS
    If InStr(1, "Recap,RAF,RAS,Babou", .Name) = 0 And Left(.Name, 1) <> "O" Then
      LigneFin = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row + 1
      .Range("B31:M38").Copy Sheets("Recap").Range("B" & LigneFin)
      LigneFin = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row
      Sheets("Recap").Range("N" & LigneFin) = .Range("D25")
    End If
  End With
 Next WS
 
End Sub
 

bloublou

XLDnaute Occasionnel
Re : Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

Bonjour le Forum, NezQuiCoule, camarchepas

Merci pour vos propositions d'aide

Finalement ca donne ca pour la proposition de NezQuiCoule :

Sub FamilleF()
Dim WS As Worksheet

For Each WS In Worksheets
If WS.Name <> "RAF" And WS.Name <> "RAS" And WS.Name <> "Babou" Then
If Left(WS.Name, 1) <> "O" Then

With WS
.Range("B31:M38").Copy Sheets("Recap").Cells(Rows.Count, 2).End(3)(2)

End With
End If
End If
Next WS

End Sub

Ca c'est fait :) Merci

Pour le 2ieme probleme de ramener la cellule D25 sur la totalité des colonnes copiées, la solution de canemarchepas n'est pas totalement complete comme je le voyais (c'est difficile d'être dans la tete des autres lol ):)

Je m'explique avec ta macro proposée je ramene bien D25 mais je voudrais qu'elle se copie colle sur l'ensemble des lignes :
Exemple :
Pour la couleur Verte je souhaiterais obtenir la cellule D25 sur les lignes N2 à N9
Pour la couleur Jaune je souhaiterais obtenir la cellule D25 sur les lignes N10 à N17
Pour la couleur Noire je souhaiterais obtenir la cellule D25 sur les lignes N18 à N25

J'espere avoir été plus clair cette fois ci :) :)

Merci beaucoup pour votre aide

BlouBlou
 

camarchepas

XLDnaute Barbatruc
Re : Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

Bonjour ,

Lol,

et oui jamais facile ////


bon , voici le code avec le petit additif qui va bien

Code:
Sub FamilleF1()
  Dim WS As Worksheet
  Dim LigneFin As Long, LigneFin2 As Long
  
  For Each WS In Worksheets
   With WS
     If InStr(1, "Recap,RAF,RAS,Babou", .Name) = 0 And Left(.Name, 1) <> "O" Then
       LigneFin = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row + 1
       .Range("B31:M38").Copy Sheets("Recap").Range("B" & LigneFin)
       LigneFin2 = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row
       Sheets("Recap").Range("N" & LigneFin & ":N" & LigneFin2) = .Range("D25")
     End If
   End With
  Next WS
  
 End Sub
 

bloublou

XLDnaute Occasionnel
Re : Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

Bonjour Canemarchepas,

Impeccable ca marche du tonnerre :)
Est ce que tu peux m'expliquer un petit peu la logique de ton code que je comprenne bien tout pour l'avenir ? :)

Egalement si j'abuse un peu, j'ai essayé de dupliquer LigneFin2 en Ligne Fin3 pour copier coller un autre element (J12 par exemple) en colonne O, ca marche bien
Mais dans le cas où je veux dupliquer 15 élements comme cela (avec des cellules non contigües), est ce qu'il existerait une synthaxe plus simple afin d'éviter de dupliquer 15 fois ce bloc ?

Sinon en tout cas c'est bien cool :)

Bonne journée

BlouBlou
 

camarchepas

XLDnaute Barbatruc
Re : Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

Alors un peu de commentaires

Code:
'Routine de construction de récapitulatif
Sub FamilleF1()
  
   Dim WS As Worksheet 'Déclaration de l'objet Feuille WS
   Dim LigneFin As Long, LigneFin2 As Long"Déclaration de pointeur derniére ligne avant ajout et aprés ajout
  'Boucle sur l'ensemble des feuilles du classeur 
  For Each WS In Worksheets
    'Mise en facteur de la feuille , chaque élement commençant par un . s'y rapporte
     With WS
       'instr regarde si .name est contenu dans la liste interdite, renvoie la position dans la chaine
       ' Si le caractére de gauche de .name est différent de O 
      If InStr(1, "Recap,RAF,RAS,Babou", .Name) = 0 And Left(.Name, 1) <> "O" Then
        'Pointe sur la ligne vide de la colonne B de la feuille Recap 
        LigneFin = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row + 1
         'Copie de la zone vers la feuille récap en commençant en B de la ligne vide
         .Range("B31:M38").Copy Sheets("Recap").Range("B" & LigneFin)
         'Pointe sur la derniere ligne utilisée de la colonne B de la feuille Recap 
        LigneFin2 = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row
         'Affecte à N de ligne vide avant copie à derniere ligne utilisée aprés copie le contenu de D25 
        Sheets("Recap").Range("N" & LigneFin & ":N" & LigneFin2) = .Range("D25")
      End If
    End With
   Next WS
   
 End Sub

Pour la question subsidiaire , peut être un truc comme cela à paramètrer bien sur :

Code:
Sub CopieMultiple()
'
 Dim zone As String
 Dim tourne As Long
 zone = "C5, C9, C12"
 For tourne = 1 To UBound(Split(zone, ",")) + 1
  Range(Split(zone, ",")(tourne - 1)).Value = 4
 Next
End Sub
 

bloublou

XLDnaute Occasionnel
Re : Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

Bonjour le forum, canemarchepas,

Merci pour toutes tes explications c'est bien plus clair :)

Pour la copie multiple, j'ai eu du mal à l'appliquer :(
j'ai adapté ton code en le dupliquant ca marche bien :]

Merci beaucoup en tout cas

BlouBlou
 

bloublou

XLDnaute Occasionnel
Re : Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

Re canemarchepas et le forum,

Encore une question
Sur ta derniere proposition de macro :
Si je veux copier coller les cellules en valeur, comment je l'integre à la macro ?

Je me suis apercu quand j'ai des formules que Excel me demande d'actualiser les liens :((( donc si j'ai 100 feuilles il faut annuler faire 100 fois la manip d'annuler :(

Merci

BlouBlou

'Routine de construction de récapitulatif
Sub FamilleF1()

Dim WS As Worksheet 'Déclaration de l'objet Feuille WS
Dim LigneFin As Long, LigneFin2 As Long"Déclaration de pointeur derniére ligne avant ajout et aprés ajout
'Boucle sur l'ensemble des feuilles du classeur
For Each WS In Worksheets
'Mise en facteur de la feuille , chaque élement commençant par un . s'y rapporte
With WS
'instr regarde si .name est contenu dans la liste interdite, renvoie la position dans la chaine
' Si le caractére de gauche de .name est différent de O
If InStr(1, "Recap,RAF,RAS,Babou", .Name) = 0 And Left(.Name, 1) <> "O" Then
'Pointe sur la ligne vide de la colonne B de la feuille Recap
LigneFin = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row + 1
'Copie de la zone vers la feuille récap en commençant en B de la ligne vide
.Range("B31:M38").Copy Sheets("Recap").Range("B" & LigneFin)
'Pointe sur la derniere ligne utilisée de la colonne B de la feuille Recap
LigneFin2 = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row
'Affecte à N de ligne vide avant copie à derniere ligne utilisée aprés copie le contenu de D25
Sheets("Recap").Range("N" & LigneFin & ":N" & LigneFin2) = .Range("D25")
End If
End With
Next WS

End Sub
 

camarchepas

XLDnaute Barbatruc
Re : Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

C'est plus que curieux ton histoire de lien .

Bon pour les valeurs , mais dans ce cas , tu n'auras plus la couleur physique dans les cellules

Code:
Sub FamilleF1()
   
   Dim WS As Worksheet 'Déclaration de l'objet Feuille WS
   Dim LigneFin As Long, LigneFin2 As Long 'Déclaration de pointeur derniére ligne avant ajout et aprés ajout
   'Boucle sur l'ensemble des feuilles du classeur
  For Each WS In Worksheets
     'Mise en facteur de la feuille , chaque élement commençant par un . s'y rapporte
      With WS
        'instr regarde si .name est contenu dans la liste interdite, renvoie la position dans la chaine
        ' Si le caractére de gauche de .name est différent de O
      If InStr(1, "Recap,RAF,RAS,Babou", .Name) = 0 And Left(.Name, 1) <> "O" Then
         'Pointe sur la ligne vide de la colonne B de la feuille Recap
        LigneFin = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row + 1
          'Copie de la zone vers la feuille récap en commençant en B de la ligne vide
          Sheets("Recap").Range("B" & LigneFin & ":M" & LigneFin + 7) = .Range("B31:M38").Value
          'Pointe sur la derniere ligne utilisée de la colonne B de la feuille Recap
        LigneFin2 = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row
          'Affecte à N de ligne vide avant copie à derniere ligne utilisée aprés copie le contenu de D25
        Sheets("Recap").Range("N" & LigneFin & ":N" & LigneFin2) = .Range("D25").Value
       End If
     End With
    Next WS
    
  End Sub
 

bloublou

XLDnaute Occasionnel
Re : Exclure les feuilles Excel qui commencent par une lettre "donnée" en VBA

Bonjour Canemarchepas, le forum,

Merci pour la soluce, peut etre que cela fait ca parce que c'est des formules matricielles avec des liens ?

Bon wk

BlouBlou
 

Discussions similaires

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg