jaroddu94
Messages postés1Date d'inscriptionlundi 20 février 2006StatutMembreDernière intervention20 février 2006
-
20 févr. 2006 à 15:03
asecher
Messages postés262Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention27 avril 2007
-
29 mars 2006 à 19:24
Bonjour,
Je travaille sur un fichier excel (copie dun tableau croisé dynamique) avec des données sur plusieurs colonnes, certaines cellules sont vides.
J'aimerais les remplir sachant qu'elles correspondent à la cellule du dessus.
J'ai commencer a ecrire ceci :
Public Sub ajoute()
Dim i As Integer
ligne1:
If ActiveCell.Value <> "" Then ActiveCell.Offset(1, 0).Select: GoTo ligne1
ActiveCell.Value = ActiveCell.Offset(-1, 0).Value
ActiveCell.Offset(1, 0).Select
GoTo ligne1:
ligne99:
Range("A1").Select
End Sub
Mon souci est que je n'arrive pas a trouver comment faire pour executer la macro d'un coup pour toutes les cellules selectionnees ! et faire arreter la macro autrement que par echap !!
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 20 févr. 2006 à 17:27
Salut
Ta macro tourne en rond et ne doit jamais s'arrêter !
C'est même étonnant que le PC ne se fige pas !
Aucune instruction ne renvoie au Label99.
Comment ou bien Où doit s'arrêter ta recherche ? Voilà le hic.
Comment ta macro saura qu'il faut qu'elle s'arrête ?
Tu parles de cellules sélectionnée : La première chose à faire dans ta macro est de mémoriser la zone de travail, le Range.
Je n'y connais pas grand chose en Excel, mais voici la méthode, à toi de trouver les instructions :
- Quand la macro commence, une plage de cellule est sélectionnée. C'est dans cette plage que la recherche et remplacement doit se faire --> mémorisation de Range --> ColonneDébut, ColonneFin, LigneDébut, LigneFin
Ces variables devront être Dimensionnées en Long (Dim ColonneDébut As Long ...)
- Il faut faire deux boucles : une pour les colonnes et une pour les lignes :
Dim NoColonne As Long, NoLigne As Long
For NoColonne = ColonneDébut To ColonneFin
For NoLigne = (LigneDébut + 1) To LigneFin ' Ligne+1 car la 1ere donnée doit forcement être remplie
Cell.Select (NoLigne, NoColonne) ' a revoir = se positionner sur la cellule X, Y
If ActiveCell.Value <> "" Then
ActiveCell.Value = ActiveCell.Offset(-1, 0).Value ' Si Offset est relatif à l'emplacement
End If
Next NoLigne
Next NoColonne
Dans tes futures macros, évite le Goto et les Labels : C'est un truc à planter le PC si ça boucle sans cesse.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 20 févr. 2006 à 17:32
Thème :
Quand tu postes une question, choisis le bon thème :
"A propos de VBFrance" n'a rien à voir avoir la prog en VBA !
Question :
De même, pourquoi "Requète" dans la question ?
Une requète = base de données, toi, c'est une macro
Et ne raconte pas ta vie "pti coup de main pour novice" : On se doute bien que si tu viens ici, c'est que tu as une question, et pleunicher ne sert à rien : On répond à tout le monde de la même manière, et personnellement, si la question porte sur un sujet que je ne maitrise pas, je ne la lis pas --> D'où l'importance de bien présenter ta question.
asecher
Messages postés262Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention27 avril 20071 22 mars 2006 à 19:42
Tiens, je profite de ce message ainsi que du fait que tu es un des admin CS les plus actifs, je me pose quelques questions sur le forum auxquelles tu pourra peut-être me répondre :
1 - Gestion des messages "Réponse acceptée" :
D'une part, je n'ai pas vu comment je pouvais déclarer une réponse comme acceptée.
D'autre part, une foultitude de messages (je me suis amusé à répondre aux premiers messages du site...) ont eu une réponse qui semble valide mais qui ne sont pas notés comme "réponse accepté", alors que l'interet est de savoir s'il y a eu résolution du problème. Il serait peut-être bien de mettre un "status" au message quand le message est obsolète ou que la réponse existe sur un autre message (avec le lien sur le message de résoluion, ce serait assez top...). Il y a aussi un "status" indiquant depuis combien de temps le compte à l'origine du message n'a pas agit... etc, on peut imaginer des tas de choses...
2 - Classification des messages :
Il serait interessant d'avoir, lors de la création d'un message, de cases à cocher pour:
Le langage (VB,VBS,VBA,DotNet,JS,etc.) (les versions mini-maxi)
le "domaine" (peut-être une reprise des thèmes de forum)
Tout cela en muti-choix (en recherche aussi)
3 - Gestion du forum
Est-il assuré par une équipe ou vit-il par lui-même ?
Tu peux peut-être aussi, pour éviter la gymnastique, paramétrer ton tableau croisé pour qu'il répète les lignes de groupes (de rupture); Voir les options de présentation du tableau croisée & l'aide Excel.