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 SubA+
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 !
@Landry : on le répétera jamais assez, c'est toujours mieux d'éviter au maximum les .Select !
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 ?
* 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