[excel] petite routine

Fermé
chacalgp - 12 nov. 2008 à 09:01
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 - 12 nov. 2008 à 13:06
Bonjour,

Dans un document excel, les lignes successives d'une même colonne peuvent présenter ou non les dimensions d'une plaque de matière sous la forme suivante :

1500 X 1000 X 30

Je souhaiterai établir une petite routine permettant de calculer le volume de ces plaques lorsque le format dans la ligne est similaire à celui là.

En français :

Pour i 1:100

Si cells(i,A) contient "X" alors

cells(i,B) doit prendre la valeur 1500
cells(i,C) doit prendre la valeur 1000
cells(i,D) doit prendre la valeur 30

cells(i,E) = cells(i,B) x cells(i,C) x cells(i,D)

next i

Pouvez-vous m'aider à mettre cela en place ?


merci d'avance
A voir également:

9 réponses

xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
12 nov. 2008 à 09:08
Bonjour,

Voila une petite macro qui devrait te permettre de faire ca:



'selection de la feuille de travail
Sheets(Feuil1.Name).Select
With Sheets(Feuil1.Name)

introw = 2
'boulce tant que cellule non vide
Do Until ActiveSheet.Cells(introw, 1).Value = ""
'test contenu case
If ActiveSheet.Cells(introw, 1).Value = X Then
ActiveSheet.Cells(introw, 2).Value = "1500"
ActiveSheet.Cells(introw, 3).Value = "1000"
ActiveSheet.Cells(introw, 4).Value = "30"
ActiveSheet.Cells(introw, 5).Value =ActiveSheet.Cells(introw, 2).Value * ActiveSheet.Cells(introw, 3).Value * ActiveSheet.Cells(introw, 4).Value
End If
introw = introw + 1
Loop
0
Merci de ta réponse rapide;

Je la teste de suite.

Ceci étant, les valeurs de ma cellule que j'ai cité (1500, 1000 et 30) sont arbitraires...

++
0
pour faire simple, les lignes successives sont de ce type :

1500 X 1000 X 30
500 X 200 X 10
1500 X 500 X 20
plaque ep10
tube PHI50
500 X 500 X 15

Je veux donc avoir un résultat du type :

1500 1000 30 4.5E7
500 200 10 1E6
1500 500 20 1.5E7
"VIDE"
"VIDE"
500 500 15 3.75E6
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
12 nov. 2008 à 09:30
Je pense que pour ton cas il faudrais mettre la longueur la largeur et la profondeur dans 3 colonne differentes...
sinon ca devient difficile et fastidieu de recuperer chaque nombre un a un...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
D'accord avec toi xavier;

Ceci étant, je travaille à partir d'un fichier excel récupéré de plus de 1000 lignes qui contient toutes les données déjà à ce format...

Donc c'est mort pour recopier dans 3 cellules différentes ces 3 données...
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
12 nov. 2008 à 09:45
Alors a ce moment la pr recuperer les infos separer dans chaque cellule pour faire le calcul a mon avis...
il faut utiliser successivement la fonction InStr InStrRev pui Mid :/
InStr(activesheet.Cells(...)," ") qui te renvoi la position du premier espace
InStrRev(activesheet.Cells(...)," ") qui te renvoi la position du dernier espace
et ensuite un Mid qui te permet de couper ta chaine de caracter mais ca parait complexe quand meme...
sinon je vois pas comment faire desole!
0
Quelqu'un vient de me suggérer d'utiliser simplement ces 2 fonctions :


CHERCHE pour indexer la position des "X"

STXT pour recopier la chaîne de caractère indéxé part les valeurs précédentes

c'est simple et ça marche niquel;

++
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 288
12 nov. 2008 à 12:59
voilà ta routine toute faite
j'ai supposé qu'il y avait une ligne de titre et que ta feuille s'appelle "feuil1"
j'ai écrit une formule en colonne D mais situ préfères un calcul direct c'est possible.
recopie cette procédure dans un module
Les Lignes qui ne contiennent pas de "X" ne sont pas traitées.


Sub calcul_du_volume()

' on travaille sur la feuil n°1 qui s'appelle "feuil1"
' je suppose qu'il y a un ligne de titre
' je commence en "A2"
Dim NbLigne As Integer
Dim C As Variant
Dim Chaine1 As String
Dim Chaine2 As String
Dim Chaine3 As String



Sheets("feuil1").Select
Range("A2").Select
'je compte le nombre de ligne
NbLigne = Range("a2").CurrentRegion.Rows.Count


For Each C In Range("a2:a" & NbLigne + 1)


If InStr(1, C, "X") > 0 Then
Chaine1 = Left(C, InStr(1, C, "X") - 1)
Chaine2 = Mid(C, InStr(1, C, "X") + 1, InStr(InStr(1, C, "X"), C, "X"))
Chaine3 = Right(C, Len(C) - (Len(Chaine1) + Len(Chaine2) + 2))

Else
'ne contient pas le charactère "X"
End If

'on supprime les espaces
Chaine1 = Trim(Chaine1)
Chaine2 = Trim(Chaine2)
Chaine3 = Trim(Chaine3)
'on écrit le résultat en valeur
C.Offset(0, 1).Value = Val(Chaine1) ' en colonne b
C.Offset(0, 2).Value = Val(Chaine2) 'en colonne c
C.Offset(0, 3).Value = Val(Chaine3)
'on écrit une formule de calcul

C.Offset(0, 4).FormulaR1C1 = "=RC[-3]*RC[-2]*RC[-1]"


Next



End Sub
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 288
12 nov. 2008 à 13:06
j'ai ajouté la gestion pour obtenir "VIDE"
je n'avais pas lu toute ta demande désolé
pour le format tu fais click sur format cellule nombre et tu choisis ce qui te convient.



Sub calcul_du_volume()

' on travaille sur la feuil n°1 qui s'appelle "feuil1"
' je suppose qu'il y a un ligne de titre
' je commence en "A2"
Dim NbLigne As Integer
Dim C As Variant
Dim Chaine1 As String
Dim Chaine2 As String
Dim Chaine3 As String



Sheets("feuil1").Select
Range("A2").Select
'je compte le nombre de ligne
NbLigne = Range("a2").CurrentRegion.Rows.Count


For Each C In Range("a2:a" & NbLigne + 1)


If InStr(1, C, "X") > 0 Then
Chaine1 = Left(C, InStr(1, C, "X") - 1)
Chaine2 = Mid(C, InStr(1, C, "X") + 1, InStr(InStr(1, C, "X"), C, "X"))
Chaine3 = Right(C, Len(C) - (Len(Chaine1) + Len(Chaine2) + 2))

Else
'ne contient pas le charactère "X"
C.Offset(0, 4).Value = "VIDE"
End If

'on supprime les espaces
Chaine1 = Trim(Chaine1)
Chaine2 = Trim(Chaine2)
Chaine3 = Trim(Chaine3)
'on écrit le résultat en valeur
C.Offset(0, 1).Value = Val(Chaine1) ' en colonne b
C.Offset(0, 2).Value = Val(Chaine2) 'en colonne c
C.Offset(0, 3).Value = Val(Chaine3)
'on écrit une formule de calcul

C.Offset(0, 4).FormulaR1C1 = "=RC[-3]*RC[-2]*RC[-1]"


Next



End Sub
0