Requete sur vb pti coup de main pour novice !

Signaler
Messages postés
1
Date d'inscription
lundi 20 février 2006
Statut
Membre
Dernière intervention
20 février 2006
-
Messages postés
262
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
27 avril 2007
-
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

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