[Résolu] Transposé une formule en VBA

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 !

Lone-wolf

XLDnaute Barbatruc
Bonjour à tous,

J'aimerais transposer cette formule en VBA, pour les colonnes I et J de la feuiile 4.

'=SOMME(SI(C6="x";1;0)+SI(E6="x";1;0)+SI(G6="x";1;0))

'=SOMME(SI(D6="x";1;0)+SI(F6="x";1;0)+SI(H6="x";1;0))


Il s'agit de compter les oui et les non pour chaque questionnaire.

Merci d'avance pour votre aide.


A+ 😎
 

Pièces jointes

Dernière édition:
Re : Transposé une formule en VBA

Sur une seule ligne (la 6), cette macro suffit. S'il y a plusieurs lignes, c'est très facile à adapter.

Code:
    Dim I As Integer
    
    For I = 3 To 7 Step 2
        If Cells(6, I) = "x" Then Cells(6, 9) = Cells(6, 9) + 1
        If Cells(6, I + 1) = "x" Then Cells(6, 10) = Cells(6, 10) + 1
    Next I
 
Re : Transposé une formule en VBA

Bonjour
VB:
With ActiveSheet.[I6:I6]: .FormulaArray = "=SUM((RC3:RC8=""x"")*MOD(COLUMN(RC3:RC8),2))": .AutoFill ActiveSheet.[I6:I15]: End With
With ActiveSheet.[J6:J6]: .FormulaArray = "=SUM((RC3:RC8=""x"")*MOD(COLUMN(RC3:RC8)+1,2))": .AutoFill ActiveSheet.[J6:J15]: End With
Cordialement.
 
Re : Transposé une formule en VBA

Bonjour Dormeur, Dranreb,

merci pour vous sugestions.

@Dranreb: le code de dormeur est plus adapté, il évite d'inserer les formules. Comme je l'ai dit dans le premier poste, je voulais tranposer une formule en VBA.

Maintenant, comment afficher les résultats ligne par ligne au lieu de toutes les lignes d'un coup?

Edit: il y a un problème avec le code, quand je clique dans les colonnes pour modification, les résultats s'accumulent.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer, j As Integer
If Intersect(Target, [questionnaire]) Is Nothing Then Exit Sub
    For i = 3 To 7 Step 2
     For j = 6 To 15
        If Cells(j, i) = "x" Then Cells(j, 9) = Cells(j, 9) + 1
        If Cells(j, i + 1) = "x" Then Cells(j, 10) = Cells(j, 10) + 1
     Next j
    Next i
End Sub


A+ 😎
 
Dernière édition:
Re : Transposé une formule en VBA

Utilisez Target.Row au lieu de j et enlevez le For j et son Next correspondant.
Faites plutôt les sommes dans des variables et rangez les à la fin.
Enfin, je ferais sans doute encore autrement.

P.S. Comme ça pour tout dire:
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Don() As Variant, Rés(1 To 1, 1 To 2) As Variant, N As Long
If Intersect(Target, [questionnaire]) Is Nothing Then Exit Sub
Don = Intersect(Me.[C:H], Target.EntireRow).Value
For N = 1 To 6
   Rés(1, 2 - N Mod 2) = Rés(1, 2 - N Mod 2) - (Don(1, N) <> "")
   Next N
Intersect(Me.[I:J], Target.EntireRow).Value = Rés
End Sub
Cordialement.
 
Dernière édition:
Re : Transposé une formule en VBA

Vous pouvez ajouter ça:
VB:
With Me.[questionnaire]
   .Cells(.Rows.Count, 1).Resize(, 6).FormulaR1C1 = "=COUNTIF(R" & .Row & "C:R[-2]C,""x"")"
   .Cells(.Rows.Count, 7).Resize(, 2).FormulaR1C1 = "=SUM(R" & .Row & "C:R[-2]C)"
   .Rows(.Rows.Count).Value = .Rows(.Rows.Count).Value
   End With
Mais je comprends de moins en moins pourquoi vous ne voulez pas garder de formules.
 
Re : Transposé une formule en VBA

Re, Dranreb

C'est le but du Classeur justement. Tranformer une formule en VBA. Si vous avez regardé les autres feuilles, les codes à la base, étaient des formules que j'ai transcrit en VBA.

Le code que vous venez d'écrire, donnes les résultats sur la ligne 15 et, désolé de vous embêter, vous voudriez bien ne pas y inserer les formules, s'il vous plaît?

Mille merci pour votre patience.


A+ 😎
 
Re : Transposé une formule en VBA

Chez moi il donne le résultat sur la ligne 17 qui est la dernière ligne de votre plage nommée "questionnaire" dans votre dernier classeur joint.
Les formules sont bien transformées en valeurs à la fin si vous regardez bien.
 
Dernière édition:
Re : Transposé une formule en VBA

Bonjour tout le monde.
Au-delà du petit problème de cumul des OUI et des NON qui me semble relativement facile à traiter, je crois qu'il conviendrait de contrôler l'entrée des "x" dans les cellules prévues à cet effet. Cela éviterait d'avoir un "X" majuscule à la place d'un "x" et surtout un "oui" ET un "non" si l'application n'est pas destinée à la Normandie.

Alors je propose la petite adaptation ci-jointe. On remplit le tableau avec des "x" en cliquant dans les cellules. Si on clique sur "oui" alors qu'il y a déjà un "non", le "non" s'efface.
 

Pièces jointes

Re : [Résolu] Transposé une formule en VBA

Alors je n'ai toujours pas compris ce dont tu avais besoin.

Tu entres tes "x" partout en cliquant dans la plage encadrée.
Quand ce sera fait, pour avoir les totaux d'une ligne, tu cliques à gauche sur le n° de l'item.
 
Re : [Résolu] Transposé une formule en VBA

Re Dormeur,

je ne savais pas qu'il fallait cliquer à gauche pour avoir les résultats à droite; en plus...
moi je suis au centre, alors imagine si je pouvais deviner. 😀 😉

En tout cas, joli travail et trouvaille (les Items).

Ca serait sympa si tu pourrais rajouter les totaux par colonne.


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

Discussions similaires

Réponses
6
Affichages
230
Réponses
9
Affichages
724
Retour