habituellement je trouve des réponses que j'adapte ensuite à mon problème,
mais cette fois ci je bloque sur quelque chose qui me parait pourtant simple.
oui je suis débutant en macro
je souhaite que ma macro tourne en boucle jusqu'à ce que la cellule selectionnée ("b3") est vide
For i = 1 To n
If Range("b3") <> "" Then
Range("B3:B5").Select
Selection.Copy
Sheets("Feuil2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Rows("1:1").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown
Sheets("Feuil1").Select
Rows("3:7").Select
Selection.Delete Shift:=xlUp
Next i
Else
End If
End Sub
merci d'avance à ceux qui auront prit le temps de lire ce sujet et à ceux qui pourront m'aider à solutionner mon petit problème
et avec quelques explications ce serait parfait pour mon instruction.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 21 nov. 2012 à 12:56
Salut
Ton code manque de commentaires.
On ne sait pas trop par quel miracle B3 va devenir vide.
Remplace ta boucle For-Next et le test de B3 vide par un Do-Loop :
Do While Range("B3").Value <> ""
' Ton code
DoEvents ' nécessaire dans toutes les boucles
Loop
Le DoEvents permet de garder la maitrise de Excel si jamais la boucle ne se terminait jamais; en cas d'erreur de programme par exemple; et ça arrive fréquemment, je te le garantis.
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)
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 21 nov. 2012 à 13:03
Bonjour,
A la place d'une boucle For, utilises plutôt une boucle Do/Loop.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list ---
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 21 nov. 2012 à 13:04
Attention aussi :
Tu changes de feuille dans ta boucle.
Range("B3") va prendre la cellule B3 de la feuille courante.
Ca peut donner des résultats bizarres.
Pense à bien préciser le nom de la feuille :
Do While Sheets("Feuil1").Range("B3").Value <> ""
(à vérifier)
Ton code est issu de l'enregistreur de macro.
Il est bardé de ".Select" ce qui veut dire que les cellules seront sélectionnées à l'écran.
Si, pendant que ta macro tourne, quelqu'un clique ailleurs, il y a un risque que ta macro perde les pédales.
Donc, après avoir récupéré du code, pense à l'optimiser pour faire disparaitre les ".Select" et autre "Selection", exemple :
Range("B3:B5").Select
Selection.Copy
' est équivalent à
Range("B3:B5").Copy
'------------------------------------------------------------
Sheets("Feuil2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, _
Operation:=xlNone, _
SkipBlanks:= False, _
Transpose:=True
' est équivalent à
Sheets("Feuil2").Range("A1").PasteSpecial Paste:=xlPasteAll, _
Operation:=xlNone, _
SkipBlanks:= False, _
Transpose:=True
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 21 nov. 2012 à 13:22
Bonjour,
Et la première cellule vide de la colonne B est tout simplement à la ligne :
Range("B1:B" & Rows.Count).SpecialCells(xlCellTypeBlanks).Row
Reste à savoir si la formulation a été bonne et qu'il ne s'agit pas de la ligne suivant la dernière ligne remplie (car c'est autre chose), d'une colonne, hein ... (formulation, quand tu nous tiens ...)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Vous n’avez pas trouvé la réponse que vous recherchez ?
merci pour vos réponse, la macro tourne correctement maintenant, j'ai juste fais une recherche pour trouver qu'il fallait placer Loop entre end If et end Sub
Ton code manque de commentaires.
On ne sait pas trop par quel miracle B3 va devenir vide.
Remplace ta boucle For-Next et le test de B3 vide par un Do-Loop :
je récupère des info sur internet pour alimenter un tableau excel
les données bruts et je veux:
sont du genre:
A1 A1 A2 A3
A2 B1 B2 B3
A3 C1 ...
B1
B2
B3
C1
...
je supprime les 3 lignes copier(feuil 1) après recopie transposée (feuil 2) ou j'y insert une ligne ensuite pour laisser la place à la copie suivante , B1 passe en A1 (ca se passe en Feuil1 "B3")
et ainsi de suite, à la derniere triple ligne éffacé de mon tableau la macro s'arretera
merci à vous pour la réponse et pour le petit cours de syntax macro