Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
pouvez-vous m'indiquer la valeur de K.. elle fait référence a quoi...
Private Sub UserForm_Initialize()
k = 0
With Sheets("Base")
For i = 2 To .[A65000].End(xlUp).Row
If .Cells(i, 14) > 0 Then
Me.ListBox1.AddItem
Me.ListBox1.List(k, 0) = .Cells(i, 1)
Me.ListBox1.List(k, 1) = .Cells(i, 2)
Me.ListBox1.List(k, 2) = .Cells(i, 14)
k = k + 1
End If
Next i
End With
End Sub
Bonsoir marleauc,
Au départ K=0
ensuite on a une boucle For... à....Next
cette partie est lue autant de fois qu'indiqué , soit i=2 au bas de col A
1ere boucle >>>i=2 et K=0
2eme boucle>>>i=3 et K=1 car la boucle est passée par K=K+1
3eme boucle>>>i=4 et K=2 et ainsi de suite
Me.ListBox1.List(k, 0) k est la ligne et tu dois avoir 3 colonnes
.Cells(i, 1) i est la ligne
J'espère que cela va t'aider
Bruno
Sub transpose_2()
Application.ScreenUpdating = False
col = 14
For Each c In Range([A2], [A65000].End(xlUp))
Cells(2, col) = [A1]
Cells(2, col) = c
Cells(2, col) = c.Offset(0, 0)
col = col + 1
Next c
Application.ScreenUpdating = True
End Sub
J'ai réussi à comprendre ce qu'il se passait avec les valeurs de colonne, c'est à dire 14, puis 15, puis 16.
Mais que se passe t'il avec la valeur de C ? La référence se fait toujours par rapport à A1, qui est vide dans le fichier.
Faut il considérer, comme cela me semble le plus probable, que
For Each c In Range([A2], [A65000].End(xlUp))
c prenne successivement la place de A2, puis B2, puis C2 ?
Super, merci 🙂
Et du coup je viens de comprendre comment on pouvait visualiser le pas à pas sur le fichier. Et la fenêtre exécution, top !
Juste une question sur ces points. Obligé de basculer entre excel et vbe quand on actionne F8 ? Ou y a t'il une possibilité d'exécuter le pas à pas en étant dans excel ?
En tout cas merci beaucoup pour tes explications et ton joli fichier.
Re,
pour faire du pas à pas il faut être en VBA
et tu passes direct en VBA si tu mets un point d'arrêt, mais tu peux réduire ou bouger la fenêtre pour voir ce qui se passe sur l'onglet.
Ne pas hésiter d'aller voir le menu "Débogage"
Lors de bug la fenêtre Exécution est super pratique en le questionnant on trouve vite ce qui coince.
Bonne soirée
Bruno
Ouaou !!
Du coup j'ai réussi à décaler la deuxième colonne, avec ce code. Est il correct ?
Code:
Sub transpose_2()
Application.ScreenUpdating = False
col = 14
For Each c In Range([A2], [A65000].End(xlUp))
Cells(2, col) = c.Value
Cells(3, col) = c.Value
Cells(3, col) = c.Offset(0, 1)
col = col + 1
Next c
Application.ScreenUpdating = True
End Sub
Merci en tout cas. Je vais pouvoir avancer sur mon fichier précédent.
Bonjour,
Non ton code n'est pas bon..
D'abord la boucle se fait 3 fois et tu lui fait remplir les 3 cellules à chaque boucle Sub transpose_2()
col = 14
For Each c In Range([A2], [A65000].End(xlUp))
Cells(3, col) = c.Value
'pas besoin des 2 lignes
col = col + 1
Next c
End Sub
Autre exemple qui fait pareil
For k=2 to [A65000].End(xlUp).row
cells(3,k+12)=cells(k,1)
next
Exemple avec transpose
t=Range([A2], [A65000].End(xlUp))
[N2].resize(1,ubound(t))=application.transpose(t)
Pour avoir de l'aide sur un mot clé mets le curseur dessus et presse la touche F1 (il faut l'aide installée)
Bruno[TABLE="width: 72"]
En passant par l'enregistreur de macro avec Collage Special, Transposer
Code:
Sub Macro1()
' Macro1 Macro
' Macro enregistrée le 10/11/2012
Range([A2], [A65536].End(xlUp)).Copy
Range("N2").PasteSpecial xlPasteAll, xlNone, False, True
Application.CutCopyMode = False
End Sub
EDITION: Houps désolé, je viens de voir qu'il y a deux demandes différentes (donc deux demandeurs distincts) dans le fil.
Du coup ma réponse ne colle pas avec la première question.
Merci, encore du boulot à tout décoder, mais bien de voir de nouvelles instructions.
@Staple
En passant par l'enregistreur de macro avec Collage Special, Transposer
Code :
Sub Macro1()
' Macro1 Macro
' Macro enregistrée le 10/11/2012
Range([A2], [A65536].End(xlUp)).Copy
Range("N2").PasteSpecial xlPasteAll, xlNone, False, True
Application.CutCopyMode = False
End Sub
Staple 🙂, voici ce que me donne à moi l'enregistreur de macro :
Code:
Range("A2:A5").Select
Selection.Copy
Et si je sélectionne toutes les cellules (A65536), j'ai le message d'erreur selon lequel la sélection est trop grande. Enfin, bref...
Problème du jour :
Code:
[AA3] = CountIf(Range("b8:x8"), ""<>"")
Message d'erreur : Erreur de copilation, erreur de syntaxe.
J'ai tout essayé, je ne comprends pas comment renseigner le Range.
Il me semblait pourtant qu'on écrivait : Range("A1:C1") Pff
Si... tu veux appeler une fonction connue, essaie plutôt
Code:
[AA3] = Application.CountIf(Range("B8:X8"), "<>")
d'ailleurs, dès que tu saisis le . après Application, tu as une liste de possibilités.
Pour avoir les fonctions, la syntaxe complète est Application.WorksheetFunction. et, après la saisie du ., tu as une nouvelle liste de choix.
A noter que le mot WorksheetFunction peut être effacé sans danger.
Il fallait donc ajouter Application à Countif. Ok, merci. Mais l'enregistreur de macro ne le fait pas lui. :
[AA3] = "=COUNTIF(R[-22]C[-24]:R[-22]C[-2],""<>"")"
Je pige pas tout, mais c'est pas grave. Ca fonctionne en tout cas comme ça.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD