VBA sur Feuil1 mais Apllication sur Feuil2
Bonjour,
J'ai un problème avec mon VBA. Sur mon VBA tout marche, c'est une question d'esthetique et de visibilité.
Quand j'execute mon VBA seul sur mon WorkBook cela fonctionne comme je voudrais. Mais j'ai posé une série de boutons sur la feuille 1, afin que quand on appuye sur l'un on ait une application qui se mette en route. Il est nécessaire de conserver tous ces boutons.
Mon problème est que sur une des apllications j'utilise le fond c'est à dire les cellules de ma feuille, or sur certains les cellules sont cachées par les boutons, vous comprendrez le problème.
Sur l'application en question j'ai écrit :
Sheets("Absence").Select
Sheets("Absence").Activate
("Absence" étant la Feuille 2)
Quand je lance l'application j'arrive sur la feuille 2 mais tout se passe toujours sur la feuille 1, j'aimerais que cela se passe sur la feuille 2 tout en gardant mon code sur la feuille 1.
J'espère avoir été assez clair.
Merci beaucoup !
Salut Dudu9294 et le forum
Ça aurait été plus simple de donner ton code !Sur l'application en question j'ai écrit :
Sheets("Absence").Select
Sheets("Absence").Activate
("Absence" étant la Feuille 2)
Quand je lance l'application j'arrive sur la feuille 2 mais tout se passe toujours sur la feuille 1, j'aimerais que cela se passe sur la feuille 2 tout en gardant mon code sur la feuille 1.
1er :
- Tu peux raccourcir ton code donné en "Sheets("Absence").Activate" => Select et Activate ont le même but quand elles ne concerne qu'un objet
2me :
- Range("A1") correspond à ActiveWorkBooks.ActiveSheet.Range("A1").
Si tu utilises le module lié à la feuille 1, Excel comprend ActiveBook.Sheets("feuille1").Range("A1").
Il faut donc remplacer Range("A1") par Sheets("feuille2").Range("A1")
Petite remarque : Les select/activate/selection/activecell ne servent généralement qu'à ralentir une macro et dans le cas des modules de classe feuille à générer des erreurs.
A+
Bonjour,
Merci de votre réponse, mais ça ne marche pas. Je vous transmet mon programme. Bien évidemment celui d'origine est beaucoup plus grand mais j'essaye d'être un maximum clair avec vous dans le but de résoudre mon problème. Si besoin est je vous envoie la totalité de mon devoir, mais il est très long..
Merci encore une fois
Bonsoir
Remplaces la macro par celle-ci
Sub Absence()
Dim x As Integer
Dim I As Integer
Dim NbEtudiants As Integer
Dim NbCours
x = InputBox(" Rappel : Cette application est à destination seule des chargés de TD." & vbCr & " Si vous voulez continuer tapez 1, sinon tapez le chiffre qui vous plait.")
If x = 1 Then
With Sheets("Absence")
.Cells.Clear
NbCours = InputBox(" Combien avez-vous de cours ce semestre ? ")
If Val(NbCours) = 0 Then Exit Sub
For I = 1 To NbCours
.Range("A" & I).Value = ("Cours n°" & I)
Next I
MsgBox (" A present vous allez rentrez le nom et le prenom des étudiants présent à votre TD ")
NbEtudiants = InputBox(" Tout d'abord combien d'étudiants assistent à votre TD ?")
For I = 1 To NbEtudiants
.Cells(NbCours + 1, 1 + I) = InputBox(" Quel est le nom et le prénom de l'étudiant que vous voulez enregistrez ?")
.Cells(NbCours + 2, 1 + I).Formula = "=IF(COUNTIF(R1C:R[-2]C,""Absent"")>2,""Défaillant"","""")"
Next I
MsgBox (" A chacun de vos cours remplissez les absences. " & vbCr & vbCr & " Si l'étudiant est absent tapez Absent, dans le cas contraire Present. ")
End With
End If
End SubPS: Elle serait mieux dans un module standard
Merci énormement à tous les deux !