explication vba

marleauc

XLDnaute Occasionnel
Bonjour

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
 

youky(BJ)

XLDnaute Barbatruc
Re : explication vba

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
 

Calvus

XLDnaute Barbatruc
Re : explication vba

Bonsoir,

Je me permets de m'immiscer dans ce fil, mais je sujet est le même. Les réponses pourront donc certainement intéresser les lecteurs.

J'ai décalé 3 lignes, de A2 à A4 en 3 colonnes de N2 à P2 de cette façon :


FranceFranceUSAItalie
USA
Italie


Avec le code suivant :


Code:
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 ?

Je joins tout de même un fichier.

Merci et bonne soirée
 

Pièces jointes

  • Explication Code Calvus.xls
    32 KB · Affichages: 57
  • Explication Code Calvus.xls
    32 KB · Affichages: 64
  • Explication Code Calvus.xls
    32 KB · Affichages: 57

youky(BJ)

XLDnaute Barbatruc
Re : explication vba

Bonsoir Calvus,
Ton For prends A2 A3 et A4
J'ai mis des explications dans ton fichier que voici en utilisant le pas à pas en macro
Bruno
 

Pièces jointes

  • Explication Code Calvus.xls
    294 KB · Affichages: 58
  • Explication Code Calvus.xls
    294 KB · Affichages: 70
  • Explication Code Calvus.xls
    294 KB · Affichages: 67

Calvus

XLDnaute Barbatruc
Re : explication vba

Bonsoir Bruno,

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.

Cordialement
 

youky(BJ)

XLDnaute Barbatruc
Re : explication vba

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
 

Calvus

XLDnaute Barbatruc
Re : explication vba

Re,

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.
 

youky(BJ)

XLDnaute Barbatruc
Re : explication vba

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
 

Staple1600

XLDnaute Barbatruc
Re : explication vba

Bonjour à tous


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.
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Re : explication vba

Bonjour,

Par Calvus message 4
que c prenne successivement la place de A2, puis B2, puis C2 ?
Par Youky message 5
Ton For prends A2 A3 et A4

Evidemment, c'est ce que je voulais dire. Merci d'avoir rectifié ma bourde, je suis parfois dyslexique avec les lignes et les colonnes :)

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)

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

Avec l'enregistreur de macros :
Code:
[AA3] = "=COUNTIF(R[-22]C[-24]:R[-22]C[-2],""<>"")"

Ca marche...

Cordialement
 

Si...

XLDnaute Barbatruc
Re : explication vba

salut

Bonjour,

Problème du jour :
Code:
[AA3] = CountIf(Range("b8:x8"), ""<>"")
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.
 

Calvus

XLDnaute Barbatruc
Re : explication vba

Bonjour,

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.

Merci
 

Discussions similaires

Réponses
4
Affichages
218
Réponses
17
Affichages
850

Statistiques des forums

Discussions
312 332
Messages
2 087 365
Membres
103 528
dernier inscrit
maro