Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 16h17   #1
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 954
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 954
Points : 1 166
Points : 1 166
Par défaut Macro VBA - fonction "Cells.Select"

Bonjour,

je suis en train de refaire une macro pas trés propre,
seulement je me heurte à la fin à une fonction que je connais pas,
impossible se savoir ce qu'elle fait...

par exemple il y avait :
Code :
1
2
3
4
5
6
7
'Code projet
    Sheets("DATA").Select
    Range("C10").Select
    sel = ActiveCell
    Sheets("RESULTAT").Select
    Range("B7:C7").Select
    ActiveCell = sel
que j'ai simplement remplacé par
Code :
1
2
'Code projet
    Sheets("RESULTAT").Range("B7:C7") = Sheets("DATA").Range("C10")
pour moi beaucoup plus simple à lire,
et le code est 5 voir six fois moins long

Le soucis c'est qu'a la fin il y a ceci
Code :
1
2
3
4
5
6
7
8
    ' Effacement de la feuille de recupération
    Sheets("DATA").Select
    Cells.Select
    Selection.ClearContents
 
    ' Remise à l'état initiale des cellules de la feuille
    Cells.Select
    Selection.NumberFormat = "General"
j'ai peur qu'il prenne toutes les cellules qui ont étaient sélectionnées de la feuille DATA
Code :
1
2
Sheets("DATA").Select
Cells.Select
et qu'il les efface
Code :
Selection.ClearContents
aprés je ne sais pas ce qu'il fait par
Code :
Selection.NumberFormat = "General"
Voila si quelqu’un peut m'éclairer,
j'ai l'impression que se problème n'est pas compliqué mais je ne trouve pas d'explications sur
et aussi d’où sort le format "Général" ? on peut définir des formats?
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h40   #2
Expert Confirmé
 
Inscription : décembre 2007
Messages : 1 908
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 908
Points : 3 708
Points : 3 708
J'ai joué un peu avec l'enregistreur de macro, j'ai selectionné toute la feuille, j'ai appuyé sur [suppr], puis j'ai été dans format-cellule, et j'ai mis un format standard. Résultat :

Code :
1
2
3
4
 
    Cells.Select
    Selection.ClearContents
    Selection.NumberFormat = "General"
je suppose que ça te donne un début de piste.....
__________________
Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
3)le temps de comprendre toutes les exigences, le projet est terminé
4)le temps de terminer le projet, les exigences ont changé
Et le serment de non-allégiance :
Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.
el_slapper est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/09/2011, 23h18   #3
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 954
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 954
Points : 1 166
Points : 1 166
Ok, merci beaucoup el_slapper pour "l'enregistreur de macro" *j'ai découvert grâce à toi*

effectivement je confirme pour deux codes
Code :
1
2
Selection.ClearContents ' efface le contenu des cellules *évident*
Selection.NumberFormat = "General" ' Définit le format de cellules comme standart
le premier, "Cells.Select",
je pense qu'il reprend toutes les cellules qui on étés sélectionnées *ça m'arrange pas mais bon*
je confirme ça dès que je peux
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 08h14   #4
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour,

Je me mêle un peu ;o))

Je pense qu'il n'est pas nécessaire de travailler sur toutes les cellules de la feuille, seule la zone utilisée doit être modifiée. Donc, je pense que ceci serait mieux approprié que Cells :
Code :
1
2
3
4
5
 
With Sheets("DATA").UsedRange
    .clearcontent
    .NumberFormat = "General"
End With
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 04/09/2011, 09h49   #5
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
bonjour,

Citation:
je suis en train de refaire une macro pas trés propre
=> je veux faire propre :

Code :
1
2
3
4
    ' Effacement de la feuille de recupération
    Sheets("DATA").Select
    Cells.Select
    Selection.ClearContents
est très sale...

Code :
1
2
3
Sub toto()
    Worksheets("Data").Cells.ClearContents
End Sub
Fait la même chose en ne demandant même pas que la feuille cible soit celle active, on gagne encore un Select..

Voir les tutoriels DVP dans la section adéquate pour les bons conseils comme :
  • Connaître la différence entre Sheets et Worksheeets (... Si le document actif n'est pas une feuille de calcul, cette propriété échoue (aide VBA à Cells.)
  • La propriété Cells (collection de Range)
  • l'instruction With qui permet de poursuivre sur les formats en code propre cf : Theze

cordialement,

PS : l'enregistreur de macro n'est pas un mauvais élève, il ne fait que transcrire les actions manuelles effectuées, rien à voir avec un code optimisé

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 05/09/2011, 09h44   #6
Membre Expert
 
Avatar de hunteshiva
 
Homme eric Maitre
Étudiant
Inscription : février 2010
Messages : 954
Détails du profil
Informations personnelles :
Nom : Homme eric Maitre
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 954
Points : 1 166
Points : 1 166
Citation:
Envoyé par Ormonth Voir le message
Code :
1
2
3
4
    ' Effacement de la feuille de recupération
    Sheets("DATA").Select
    Cells.Select
    Selection.ClearContents
est très sale...
Tout à fait d'accord

c'est le code que j’essayais de comprendre mais en voyant ta ligne de code
Code :
Worksheets("Data").Cells.ClearContents
tout est claire maintenant, en fesant le paralléle avec ce qu'a dit el_slapper
Citation:
j'ai sélectionné toute la feuille
Le code devient simplement: *ludique*
Code :
1
2
3
4
5
    ' Effacement de la feuille de recupération
    Sheets("DATA").Cells.ClearContents
 
    ' Remise à l'état initiale des cellules de la feuille
    Sheets("DATA").Cells.NumberFormat = "General"
Merci beaucoup les gars !!!

PS: je suis contre les select, c'est comme les GoTo, c'est à bannir
hunteshiva est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/09/2011, 10h31   #7
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Citation:
Le code devient simplement: *ludique*
... cf Hervé

Code :
1
2
3
4
5
6
Sub MrPropre()
With Sheets("DATA").Cells
    .ClearContents ' Effacement de la feuille de recupération
    .NumberFormat = "General" ' Remise à l'état initiale des cellules de la feuille
End With
End Sub
cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h29.


 
 
 
 
Partenaires

Hébergement Web