Problème de calcul
Résolu/Fermé
JinRo
Messages postés
22
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 décembre 2013
-
29 mai 2013 à 01:21
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 31 mai 2013 à 14:10
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 31 mai 2013 à 14:10
A voir également:
- Problème de calcul
- Calcul moyenne excel - Guide
- Formule de calcul excel - Guide
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Logiciel gratuit calcul surface m2 - Télécharger - Outils professionnels
5 réponses
f894009
Messages postés
17191
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
20 mai 2024
1 708
29 mai 2013 à 09:21
29 mai 2013 à 09:21
Bonjour,
pourquoi ecrire une formule?????
aa(i, 27) = Sum(Cells(i, 31) + Cells(i, 32) + Cells(i, 33) + Cells(i, 36))
A voir
pourquoi ecrire une formule?????
aa(i, 27) = Sum(Cells(i, 31) + Cells(i, 32) + Cells(i, 33) + Cells(i, 36))
A voir
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 302
29 mai 2013 à 09:41
29 mai 2013 à 09:41
Bonjour,
Toujours se méfier des macros faites pour un autre besoin !
aa est un tableau et comporte toutes les cellules avec leur valeur pouquoi va tu rechercher les cellules ?
une piste non testée:
Toujours se méfier des macros faites pour un autre besoin !
aa est un tableau et comporte toutes les cellules avec leur valeur pouquoi va tu rechercher les cellules ?
une piste non testée:
Option Explicit Sub Calcul() Dim Ligne As Integer, Fin As Integer, T_aa() With Feuil1 Fin = .Range("A" & Rows.Count).End(xlUp).Row If Fin <= 2 Then GoTo vide T_aa = .Range("A2:CK" & Fin).Value For Ligne = 2 To UBound(T_aa) T_aa(Ligne, 27) = T_aa(Ligne, 31) + T_aa(Ligne, 32) + T_aa(Ligne, 33) + T_aa(Ligne, 36) Next .Range("A2:CK" & Fin) = T_aa End With Exit Sub vide: MsgBox "tableau vide !", vbCritical End Sub
JinRo
Messages postés
22
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 décembre 2013
31 mai 2013 à 08:45
31 mai 2013 à 08:45
Bonjour à tous deux et merci de vos réponses.
Navré mais je réponds aussi vite que possible. (Bcp de choses à faire et vraiment très peu de temps !)
Pour ta réponse f 894009, étrangement il ne se passe rien... mais j'ai très probablement omis quelque chose...
Quant à ta solution michel_m, je l'ai testé et étrangement en ayant
des cellules remplies, je n'ai aucune addition qui s'exécute mais toujours la MsgBox qui s'affiche...
Mais après avoir validé j'ai remarqué que mes cellules contenant des données à additionner avaient toutes l'indication que des chiffrent étaient stockées sous forme de texte. Alors ok, je ne sais pas comment déclaré mes textes box en une fois pour qu'elle indiquent des chiffres sous formes de chiffres. J'ai vu qu'il y avait plusieurs façon de le faire. Mais je ne sais pas vraiment comment bien les appliquer. Alors j'ai voulu testé en effaçant les données insérées via USF et je les ai insérées manuellement. Là le tableau est tjrs vide... Alors je ne comprends pas bien d'où vient le problème.
Est-ce qu'il pourrait venir du code de l'USF ?
Le voici histoire que vous puissiez voir exactement ce que j'ai fait :
Dans le Module1 :
Option Explicit
Public aa
Public mem&
Public mem1 As Boolean
Option Base 1
Sub Buton1()
II.Show 0
End Sub
Sub Calcul()
Dim Ligne As Integer, Fin As Integer, T_aa()
With Feuil1
Fin = .Range("A" & Rows.Count).End(xlUp).Row
If Fin <= 2 Then GoTo vide
T_aa = .Range("A2:CK" & Fin).Value
For Ligne = 2 To UBound(T_aa)
T_aa(Ligne, 27) = T_aa(Ligne, 31) + T_aa(Ligne, 32) + T_aa(Ligne, 33) + T_aa(Ligne, 36)
Next
.Range("A2:CK" & Fin) = T_aa
End With
Exit Sub
vide:
MsgBox "tableau vide !", vbCritical
End Sub
Le code de l'USF :
Option Explicit
Option Base 1
Private Sub Bt1_Click()
Dim i&, lig&
If C1 = "" Or T2 = "" Or T1 = "" Then MsgBox "Veuillez SVP remplir avant de Valider!!", , "Manque d'informations": Exit Sub
With Feuil1
lig = Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1
Feuil1.Cells(lig, 1) = T1: Feuil1.Cells(lig, 4) = T3: T1 = "": T3 = ""
Feuil1.Cells(lig, 3) = T2: Feuil1.Cells(lig, 5) = C2: T2 = "": C2 = ""
Feuil1.Cells(lig, 6) = C3: Feuil1.Cells(lig, 7) = T4: C3 = "": T4 = ""
Feuil1.Cells(lig, 8) = T5: Feuil1.Cells(lig, 9) = C4: T5 = "": C4 = ""
Feuil1.Cells(lig, 2) = C1: C1 = ""
For i = 6 To 85
Feuil1.Cells(lig, i + 4) = Controls("T" & i): Controls("T" & i) = ""
Next i
End With
End Sub
Private Sub Bt2_Click()
Dim i&, lig&
If C1.ListIndex = -1 Then MsgBox "Vous n'avez choisi aucun nom dans la liste", , "Modifications Impossible": Exit Sub
lig = C1.List(C1.ListIndex, 1)
With Feuil1
Feuil1.Cells(lig, 1) = T1: Feuil1.Cells(lig, 4) = T3: T1 = "": T3 = ""
Feuil1.Cells(lig, 3) = T2: Feuil1.Cells(lig, 5) = C2: T2 = "": C2 = ""
Feuil1.Cells(lig, 6) = C3: Feuil1.Cells(lig, 7) = T4: C3 = "": T4 = ""
Feuil1.Cells(lig, 8) = T5: Feuil1.Cells(lig, 9) = C4: T5 = "": C4 = ""
Feuil1.Cells(lig, 2) = C1: C1 = ""
For i = 6 To 85
Feuil1.Cells(lig, i + 4) = Controls("T" & i): Controls("T" & i) = ""
Next i
End With
End Sub
Private Sub Bt5_Click()
Unload Me
End Sub
Private Sub C1_Click()
Dim i&, lig&
If C1.ListIndex = -1 Then Exit Sub
lig = C1.List(C1.ListIndex, 1)
T1 = Feuil1.Cells(lig, 1): T2 = Feuil1.Cells(lig, 3)
T3 = Feuil1.Cells(lig, 4): C2 = Feuil1.Cells(lig, 5)
C3 = Feuil1.Cells(lig, 6): T4 = Feuil1.Cells(lig, 7)
T5 = Feuil1.Cells(lig, 8): C4 = Feuil1.Cells(lig, 9)
For i = 6 To 85
Controls("T" & i) = Feuil1.Cells(lig, i + 4)
Next i
End Sub
Private Sub UserForm_Initialize()
Dim i&, Fin&, bb, cc
With Feuil1
aa = .Range("A2:CK" & .Range("A" & Rows.Count).End(xlUp).Row)
For i = 1 To UBound(aa)
aa(i, 85) = i + 1
Next i
cc = .Range("B2:C" & .Range("A" & Rows.Count).End(xlUp).Row)
For i = 1 To UBound(cc)
cc(i, 2) = i + 1
Next i
C1.List = cc
End With
With Sheets("Base")
bb = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row)
C4.List = bb
bb = .Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row)
C2.List = bb
bb = .Range("C2:C" & .Range("C" & Rows.Count).End(xlUp).Row)
C3.List = bb
End With
End Sub
Comme je l'ai déjà dit, je débute, je bouquine et je regarde pas mal d'autres fichier déjà créer pour essayer de comprendre et d'adapter ce que je vois. Je sais que ce n'est pas la meilleure façon de faire. Malheureusement pour le moment je ne peux pas réellement me former autrement. Par conséquent, je vous remercie de votre indulgence quant à mes erreurs de débutants et de compréhension ainsi que de votre patience.
Navré mais je réponds aussi vite que possible. (Bcp de choses à faire et vraiment très peu de temps !)
Pour ta réponse f 894009, étrangement il ne se passe rien... mais j'ai très probablement omis quelque chose...
Quant à ta solution michel_m, je l'ai testé et étrangement en ayant
des cellules remplies, je n'ai aucune addition qui s'exécute mais toujours la MsgBox qui s'affiche...
Mais après avoir validé j'ai remarqué que mes cellules contenant des données à additionner avaient toutes l'indication que des chiffrent étaient stockées sous forme de texte. Alors ok, je ne sais pas comment déclaré mes textes box en une fois pour qu'elle indiquent des chiffres sous formes de chiffres. J'ai vu qu'il y avait plusieurs façon de le faire. Mais je ne sais pas vraiment comment bien les appliquer. Alors j'ai voulu testé en effaçant les données insérées via USF et je les ai insérées manuellement. Là le tableau est tjrs vide... Alors je ne comprends pas bien d'où vient le problème.
Est-ce qu'il pourrait venir du code de l'USF ?
Le voici histoire que vous puissiez voir exactement ce que j'ai fait :
Dans le Module1 :
Option Explicit
Public aa
Public mem&
Public mem1 As Boolean
Option Base 1
Sub Buton1()
II.Show 0
End Sub
Sub Calcul()
Dim Ligne As Integer, Fin As Integer, T_aa()
With Feuil1
Fin = .Range("A" & Rows.Count).End(xlUp).Row
If Fin <= 2 Then GoTo vide
T_aa = .Range("A2:CK" & Fin).Value
For Ligne = 2 To UBound(T_aa)
T_aa(Ligne, 27) = T_aa(Ligne, 31) + T_aa(Ligne, 32) + T_aa(Ligne, 33) + T_aa(Ligne, 36)
Next
.Range("A2:CK" & Fin) = T_aa
End With
Exit Sub
vide:
MsgBox "tableau vide !", vbCritical
End Sub
Le code de l'USF :
Option Explicit
Option Base 1
Private Sub Bt1_Click()
Dim i&, lig&
If C1 = "" Or T2 = "" Or T1 = "" Then MsgBox "Veuillez SVP remplir avant de Valider!!", , "Manque d'informations": Exit Sub
With Feuil1
lig = Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1
Feuil1.Cells(lig, 1) = T1: Feuil1.Cells(lig, 4) = T3: T1 = "": T3 = ""
Feuil1.Cells(lig, 3) = T2: Feuil1.Cells(lig, 5) = C2: T2 = "": C2 = ""
Feuil1.Cells(lig, 6) = C3: Feuil1.Cells(lig, 7) = T4: C3 = "": T4 = ""
Feuil1.Cells(lig, 8) = T5: Feuil1.Cells(lig, 9) = C4: T5 = "": C4 = ""
Feuil1.Cells(lig, 2) = C1: C1 = ""
For i = 6 To 85
Feuil1.Cells(lig, i + 4) = Controls("T" & i): Controls("T" & i) = ""
Next i
End With
End Sub
Private Sub Bt2_Click()
Dim i&, lig&
If C1.ListIndex = -1 Then MsgBox "Vous n'avez choisi aucun nom dans la liste", , "Modifications Impossible": Exit Sub
lig = C1.List(C1.ListIndex, 1)
With Feuil1
Feuil1.Cells(lig, 1) = T1: Feuil1.Cells(lig, 4) = T3: T1 = "": T3 = ""
Feuil1.Cells(lig, 3) = T2: Feuil1.Cells(lig, 5) = C2: T2 = "": C2 = ""
Feuil1.Cells(lig, 6) = C3: Feuil1.Cells(lig, 7) = T4: C3 = "": T4 = ""
Feuil1.Cells(lig, 8) = T5: Feuil1.Cells(lig, 9) = C4: T5 = "": C4 = ""
Feuil1.Cells(lig, 2) = C1: C1 = ""
For i = 6 To 85
Feuil1.Cells(lig, i + 4) = Controls("T" & i): Controls("T" & i) = ""
Next i
End With
End Sub
Private Sub Bt5_Click()
Unload Me
End Sub
Private Sub C1_Click()
Dim i&, lig&
If C1.ListIndex = -1 Then Exit Sub
lig = C1.List(C1.ListIndex, 1)
T1 = Feuil1.Cells(lig, 1): T2 = Feuil1.Cells(lig, 3)
T3 = Feuil1.Cells(lig, 4): C2 = Feuil1.Cells(lig, 5)
C3 = Feuil1.Cells(lig, 6): T4 = Feuil1.Cells(lig, 7)
T5 = Feuil1.Cells(lig, 8): C4 = Feuil1.Cells(lig, 9)
For i = 6 To 85
Controls("T" & i) = Feuil1.Cells(lig, i + 4)
Next i
End Sub
Private Sub UserForm_Initialize()
Dim i&, Fin&, bb, cc
With Feuil1
aa = .Range("A2:CK" & .Range("A" & Rows.Count).End(xlUp).Row)
For i = 1 To UBound(aa)
aa(i, 85) = i + 1
Next i
cc = .Range("B2:C" & .Range("A" & Rows.Count).End(xlUp).Row)
For i = 1 To UBound(cc)
cc(i, 2) = i + 1
Next i
C1.List = cc
End With
With Sheets("Base")
bb = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row)
C4.List = bb
bb = .Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row)
C2.List = bb
bb = .Range("C2:C" & .Range("C" & Rows.Count).End(xlUp).Row)
C3.List = bb
End With
End Sub
Comme je l'ai déjà dit, je débute, je bouquine et je regarde pas mal d'autres fichier déjà créer pour essayer de comprendre et d'adapter ce que je vois. Je sais que ce n'est pas la meilleure façon de faire. Malheureusement pour le moment je ne peux pas réellement me former autrement. Par conséquent, je vous remercie de votre indulgence quant à mes erreurs de débutants et de compréhension ainsi que de votre patience.
f894009
Messages postés
17191
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
20 mai 2024
1 708
Modifié par f894009 le 31/05/2013 à 09:10
Modifié par f894009 le 31/05/2013 à 09:10
Bonjour,
C'est michel_m qui donne la bonne solution et moi a cote de mes pompes sur ce coup la
C'est michel_m qui donne la bonne solution et moi a cote de mes pompes sur ce coup la
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 302
31 mai 2013 à 12:17
31 mai 2013 à 12:17
Bonjour
pourquoi aa dans les déclarations puisque tu utilises T_aa la déclaration que j'avais indiqué était T_aa(), les parenthèses ont leur importance
d'autre part, dans tout code, il est INDISPENSABLE de faciliter un max la maintenance et que le type des variables et de leurs propriétés et méthodes soient intuitivement reconnaissables
le i& sent son GWbasic des années 80 et i as integer est préférable à l'ésotérique "i&", bien que les variables à une lettre soient mal vues mais utilisées m^me par Microsoft
dans tes codes quès aco C, T ?
aa, bb, cc.... il ya des noms plus explicites par ex fin ou derlig....
quant à II.Show 0 j'avoue que je ne comprends pas II: userform ? 0: faut que je regarde un bouquin: hide ? ce n'est pas unload puisque tu l'utilises dans un autre code
tout cela semble être - à tort, certes-le boulot bâclé et inutilement ésotérique
enfin, un Textbox (les T;;?) renvoient du texte donc...
voilà, excuses moi d'être un peu sec, mais tu as la réaction du service maintenance: dans ton boulot c'est la plus importante et le jugement est durable...
Donc, clarifie tout ça et reviens si tu as toujours des problèmes, ça me fera plaisir de t'aider
pourquoi aa dans les déclarations puisque tu utilises T_aa la déclaration que j'avais indiqué était T_aa(), les parenthèses ont leur importance
d'autre part, dans tout code, il est INDISPENSABLE de faciliter un max la maintenance et que le type des variables et de leurs propriétés et méthodes soient intuitivement reconnaissables
le i& sent son GWbasic des années 80 et i as integer est préférable à l'ésotérique "i&", bien que les variables à une lettre soient mal vues mais utilisées m^me par Microsoft
dans tes codes quès aco C, T ?
aa, bb, cc.... il ya des noms plus explicites par ex fin ou derlig....
quant à II.Show 0 j'avoue que je ne comprends pas II: userform ? 0: faut que je regarde un bouquin: hide ? ce n'est pas unload puisque tu l'utilises dans un autre code
tout cela semble être - à tort, certes-le boulot bâclé et inutilement ésotérique
enfin, un Textbox (les T;;?) renvoient du texte donc...
voilà, excuses moi d'être un peu sec, mais tu as la réaction du service maintenance: dans ton boulot c'est la plus importante et le jugement est durable...
Donc, clarifie tout ça et reviens si tu as toujours des problèmes, ça me fera plaisir de t'aider
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
JinRo
Messages postés
22
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 décembre 2013
31 mai 2013 à 12:48
31 mai 2013 à 12:48
Rebonjour Michel_m,
Pas de soucis sur ta façon de me répondre, je comprends bien ce que tu me dis. Malheureusement, comme je l'ai dit je me forme en autodidacte.
Le code que tu vois est le résultat d'une aide que j'ai eu par un informaticien.
Il avait dit que m'a façon de faire ressemblait trop à ce qu'il y avait dans les livres actuels et qu'il y avait trop d'information. Et m'a montré cette façon de faire qui me semblait assez simple et logique pour quelqu'un qui comme moi débute.
Excuse moi si j'ai planté les () et je vais essayer de répondre à certaines de tes intérogations.
aa, bb, cc font références à des plages de données spécifiques. Car visiblement faire des listes par codes vba n'est pas très sür... pour certaines choses... (Explications succinte que j'ai eu...) SVP me demande pas quoi.
Je sais que les textebox font références à du texte d'où ma question comment bien codé la chose pour que ça soit des chiffres pour les textbox qui doivent renvoyé uniquement des chiffres et pour que les autres renvoient du text. le format. #.## par exemple ou comment déclaré une variable qui va pour tout.
le II est le nom donné au USF.
Encore fois, désolé pour ce travail ésotrique baclé mais quand tu reçois de l'aide dans un domaine que tu ne connais pas tu n'es pas bon juge.
Là, j'essais de me former quelque peu en vba car ça m'intéresse vraiment et que j'ai des fichiers qui sont une horreur à utiliser de par le fait des nombreuses feuilles et autres d'où le fait que j'essais de créer quelque chose de plus fonctionnel et visuelle.
Je vais essayer de refaire quelque chose en repartant à zéro. Et si tu es d'accord j'essairai de te le ressoumettre pour correction.
Merci encore.
Pas de soucis sur ta façon de me répondre, je comprends bien ce que tu me dis. Malheureusement, comme je l'ai dit je me forme en autodidacte.
Le code que tu vois est le résultat d'une aide que j'ai eu par un informaticien.
Il avait dit que m'a façon de faire ressemblait trop à ce qu'il y avait dans les livres actuels et qu'il y avait trop d'information. Et m'a montré cette façon de faire qui me semblait assez simple et logique pour quelqu'un qui comme moi débute.
Excuse moi si j'ai planté les () et je vais essayer de répondre à certaines de tes intérogations.
aa, bb, cc font références à des plages de données spécifiques. Car visiblement faire des listes par codes vba n'est pas très sür... pour certaines choses... (Explications succinte que j'ai eu...) SVP me demande pas quoi.
Je sais que les textebox font références à du texte d'où ma question comment bien codé la chose pour que ça soit des chiffres pour les textbox qui doivent renvoyé uniquement des chiffres et pour que les autres renvoient du text. le format. #.## par exemple ou comment déclaré une variable qui va pour tout.
le II est le nom donné au USF.
Encore fois, désolé pour ce travail ésotrique baclé mais quand tu reçois de l'aide dans un domaine que tu ne connais pas tu n'es pas bon juge.
Là, j'essais de me former quelque peu en vba car ça m'intéresse vraiment et que j'ai des fichiers qui sont une horreur à utiliser de par le fait des nombreuses feuilles et autres d'où le fait que j'essais de créer quelque chose de plus fonctionnel et visuelle.
Je vais essayer de refaire quelque chose en repartant à zéro. Et si tu es d'accord j'essairai de te le ressoumettre pour correction.
Merci encore.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 302
31 mai 2013 à 14:10
31 mai 2013 à 14:10
OK, pas de problème