Va et vient entre 2 feuilles

Bonjour,

Mon problème est simple, mais je ne m'en sors pas !

Dans un classeur Excel j'ai 2 feuilles : Une feuille "A" où il y a un tas de choses et une feuille "B" vide et dans laquelle je voudrais récupérer certaines cellules de la feuille "A" à condition qu'elles soient en rouge, en gras et centré.

J'ai fait le module suivent :

Sub Recup_Sosa()

Dim Cellule As Range

Application.ScreenUpdating = False

For Each Cellule In Range("F34:VF201")

If Cellule.HorizontalAlignment = xlCenter And Cellule.Font.Bold = True And Cellule.Font.Color = -16776961 Then

NumSosa = Cellule.Value

Sheets("B").Select

ActiveCell.Value = NumSosa

ActiveCell.Offset(1, 0).Select

End If

Sheets("A").Select

Next Cellule

Application.ScreenUpdating = True

End Sub

Mais quand je lance la macro, rien ne se passe !

Pourriez-vous me dire pourquoi ?

Merci d'avance

Bonjour Landry,

Qu'à a voir le titre de ton post avec ton problème ?

Si certaines de tes cellules sont en rouge, gras et centré avec une MFC (Mise en Forme Conditionnelle) c'est normal !

Tu ne pourras pas tester les propriétés de cette façon.

En revanche tu peux effectuer les tests qui rendent les cellules rouge, gras, et centré

De plus, il est complètement inutile de faire des "Select" perte de temps dans l'exécution de la macro.

Sub Recup_Sosa()
  Dim Cellule As Range, LigneB As Long
  ' Initialiser la ligne de la feuille B
  LigneB = 2
  ' Effacer la colonne A si c'est celle qui doit contenir les valeurs
  Sheets("B").Range("A:A").ClearContents
  ' ou, si on veut partir à la suite des lignes existantes de la colonne A
  LigneB = Sheets("B").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
  '
  Application.ScreenUpdating = False
  For Each Cellule In Range("F34:VF201")
    ' Ce test ne fonctionne pas si MFC dans cellule
    If Cellule.HorizontalAlignment = xlCenter And Cellule.Font.Bold = True And Cellule.Font.Color = -16776961 Then
      Sheets("B").Range("A" & LigneB).Value = Cellule.Value
      LigneB = LigneB + 1
    End If
  Next Cellule
  Application.ScreenUpdating = True
End Sub

A+

coucou Bruno,

tu a écrit :

Qu'a à voir le titre de ton post avec ton problème ?

allons, tu ne vois pas ? mais si, voyons : le titre du sujet est : « Va et vient entre 2 feuilles » et le code VBA de Landry contient dans la boucle For Each Cellule .. Next Cellule ces 2 instructions : Sheets("B").Select et Sheets("A").Select ; alors excuse-moi du peu, mais comme va et vient entre 2 feuilles, on fait pas mieux ! (ça danse la Java, hein ? mais ça reste quand même du VBA, c'est pas du Java !)


@Landry : on le répétera jamais assez, c'est toujours mieux d'éviter au maximum les .Select ! ça ralentit le code VBA ! ... et heureusement qu't'as pensé à mettre avant ta boucle For Each Cellule l'instruction Application.ScreenUpdating = False car sinon, tu parles d'un flashage, hein ? pour le coup, ton titre aurait été « Va et vient et Sapin de Noël » !

dhany

Bonjour Landry,

lis d'abord la 2ème partie de mon post précédent, puis celui-ci.

je te propose ce code VBA :

Option Explicit

Sub Recup_Sosa()
  If ActiveSheet.Name <> "A" Then Exit Sub
  Dim lg1&, lg2&, col%: lg2 = 1: Application.ScreenUpdating = 0
  For lg1 = 34 To 201
    For col = 6 To 578 'colonnes F à VF
      With Cells(lg1, col)
        If .HorizontalAlignment = xlCenter And .Font.Bold = True And .Font.Color = 255 Then
          Worksheets("B").Cells(lg2, 1) = .Value: lg2 = lg2 + 1
        End If
      End With
    Next col
  Next lg1
  Worksheets("B").Select
End Sub

* colonnes F à VF : 573 colonnes ! tu as vraiment autant d'colonnes que ça ? tu t'es pas trompé ?

* comme tu as écrit que ta feuille "B" est vide, j'ai pas jugé utile de l'effacer ; si ensuite ça s'avère utile, à toi de l'ajouter.

* pour le n° couleur, tu as utilisé : -16776961 ; bizarre, ce nombre négatif ; et le même nombre en positif est du cyan, pas du rouge ! j'ai utilisé 255 pour le rouge pur, mais hélas, j'ai pas réussi à voir la couleur de ton vrai rouge sur ton fichier absent !

* à la fin de ta sub, tu as mis : Application.ScreenUpdating = True : inutile, car fait automatiquement avant la sortie de la sub

* la macro ne fonctionne qu'à partir de la feuille "A", et en fin d'exécution, ça va sur la feuille "B" pour te montrer les résultats ; là, ce .Select est le but-même de l'opération ; et j'ai pas dit qu'il faut jamais les utiliser !

* si rien ne se passe avec mon code VBA, c'est que ton rouge n'est pas du rouge pur ; à toi de mettre le bon code couleur !

dhany

Bonjour

A noter qu'il s'agit d'un multipost avec aussi des réponses ailleurs qui attendent le retour du posteur...

Bonjour Chris,

* avec un peu d'chance, les réponses qu'on donne sur ce forum seront mieux que les réponses des autres forums ?

* à propos du retour de Landry, peut-être qu'il profite de son week-end et qu'il sera là demain ?

dhany

Bonjour les amis,

Excusez-moi si j'ai tardé, mais j'étais tellement absorbé par mon problème que j'en oubliais de consulter mes mails.

J'ai fini par trouver la solution en modifiant quelque peu mon code et j'ai trouvé la solution :

Sub Recup_Sosa_2()

Dim Cellule As Range

Application.ScreenUpdating = True

For Each Cellule In Range("F34:VF201")

If Cellule.Font.Color = 255 And Cellule.Font.FontStyle = "Gras" And Cellule.Value <> "" Then

NumSosa = Cellule.Value

Sheets("B").Select

ActiveCell.Value = NumSosa

ActiveCell.Offset(1, 0).Select

Sheets("A").Select

End If

Next Cellule

Application.ScreenUpdating = True

End Sub

Un grand merci à dhany et à BrunoM45 pour leurs explications que je vais étudier de près car c'est une autre façon de voir les choses qui m'intéresse.

En exécutant pas à pas (F8) je me suis aperçu que mon problème venait surtout de la ligne :

If Cellule.HorizontalAlignment = xlCenter And Cellule.Font.Bold = True And Cellule.Font.Color = -16776961 Then

Cellule.HorizontalAlignment = xlCenter ne marchait pas ! Pourquoi ? J'en sais rien ! J'ai supprimé !

Cellule.Font.Bold = True ne marchait pas, remplacé par Cellule.Font.FontStyle = "Gras" qui marche

Enfin Cellule.Font.Color = -16776961 était erroné, mais c'est Excel qui a des réactions bizzares. En effet, en regardant le résultat d'une macro enregistrée où j'avais mis une cellule en rouge ... voilà le résultat :

With Selection.Font

.Color = -16776961

.TintAndShade = 0

End With

Dieu seul sait d'où Excel sort ce -16776961 !!!

De plus, j'ai rajouté Cellule.Value <> "" car de nombreuses cellules vides étaient formatées en rouge et en gras.

Si vous êtes intrigués par mes 573 colonnes, par d'erreur, c'est normal. C'est un arbre généalogique ... et je n'en suis qu'au début ! (je pense d'ailleurs qu'Excel ne supportera pas mon arbre en entier, mais tant pis j'irais jusqu'à temps qu'il craque, car il se prête tellement bien à ce travail)

Encore merci à tous ceux qui se sont penchés sur mon problème.

Bonne fin de week-end et bonne semaine prochaine !

merci pour ton retour !

bonne chance pour ton arbre généalogique ! (même si tu pourras pas remonter jusqu'à Adam et Ève)

bonne fin de week-end à toi aussi, et bonne semaine prochaine également !

dhany

Rechercher des sujets similaires à "vient entre feuilles"