Requete sur vb pti coup de main pour novice !

jaroddu94 Messages postés 1 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 20 février 2006 - 20 févr. 2006 à 15:03
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 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 !!

Merci pour votre aide...

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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.
0
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
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 ?

Cordialement,

Alain 31
0
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
29 mars 2006 à 19:24
Bonjour jaroddu94

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.



Alain 31


(pourquoi coder si c'est déjà codé ?)
0
Rejoignez-nous