ista00
Messages postés8Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention 3 janvier 2008
-
28 déc. 2007 à 12:58
ista00
Messages postés8Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention 3 janvier 2008
-
3 janv. 2008 à 18:43
bonjour tt le monde au fait j'ai un bout de code mais j'ai encore des pbl si quelqu'un peut m'aider je lui serais reconnaissante, j'explique mon probleme bon je dois copier d'une feuille excel en une autre mais là que ceratain champs , le num de gsm et le montant que la personne a consomé , par mois et ecrire le montant de chaque mois'1,2,3...)sans que le num de tel se repete je sais pas c koi le probleme
ista00
Messages postés8Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention 3 janvier 2008 2 janv. 2008 à 14:39
salut
bonne année avec les meilleurs voeux ,merci ,au faite voila le code ,
Sub macro5()
Dim i, h, m
Dim dat
Dim gsm
Dim mont
Dim numsec
Dim etat
fey = "gsm"
numsec = "test"
'une boucle sur la liste des gsm de la feuille gsm
For i = 2 To 7
dat = Cells(i, 1)
gsm = extractGSM(Cells(i, 5))
mont = Cells(i, 6)
h = 2
m = 2
etat = "No"
'MsgBox "recherche :" & gsm
'vérification de la cellule : si elle est vide ou non
Do While Sheets(fey).Range("B" & h).Value <> ""
'vérification de l'existance du n° GSM sur la feuille "gsm"
If Sheets(fey).Range("B" & h) = gsm Then
Sheets(fey).Range("B" & m) = gsm
' le n° GSM existe dèjà sur la feuille "gsm"
'MsgBox "le n°gsm est à la ligne:" & h
'il faut saisir le montant
For j = 3 To 14
If (Sheets(fey).Cells(1, j).Value = dat) Then
Sheets(fey).Cells(h, j) = mont
End If
Next
Sheets(fey).Range("A" & h) = numsec
'on change la valeur de etat pour marquer l'existance du n° gsm
etat = "yes"
End If
h = h + 1
m = h
Loop
'Si le n° GSM n'existe pas sur la feuille "gsm"
If etat = "No" Then
Sheets(fey).Range("B" & m) = gsm
Sheets(fey).Range("A" & m) = numsec
'etat = "yes"
'il faut saisir le montant
For j = 3 To 14
If (Sheets(fey).Cells(1, j).Value = dat) Then
Sheets(fey).Cells(m, j) = mont
End If
Next
End If
Next
End Sub
Function extractGSM(chaine)
'chaine = "MEDITEL TLP GSM 073082427 01/07"
m = WorksheetFunction.Search("0", chaine, 1)
'MsgBox Mid(chaine, m + 4, 9)
extractGSM = Mid(chaine, m, 9)
End Function
le probleme c'est que apres que j'ai mise la fonction ,le num de tel se repete alors que avnt il ecrit une seule fois le num de telephone et pour chaque mois met le montant consommé,bon merci
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 2 janv. 2008 à 16:40
Premièrement, comme h = m, il ne sert à rien d'utiliser les 2
Pour ton problème, si j'ai bien compris, tu ne veux pas inscrire le numéro "gsm" plusieurs fois.
Il te faudrait donc utiliser une variable booléenne qui indique si tu l'as trouvé une première fois. Si c'est le cas, tu ne l'inscrit pas.
Quelque chose comme
If Not DejaTrouve then
gsm = extractGSM(Cells(i, 5))
DejaTrouve = True
End If
Et plus loin dans ton code, lorsque tu écris ce gsm, tu vérifies auparavant si DejaTrouve = True ou False
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA.
ista00
Messages postés8Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention 3 janvier 2008 2 janv. 2008 à 17:38
oui merci d'avoir repondu , au fait je rexplique moi j'ai 2 fueilles en excel une qui contient des informations sur des employés ,moi je m'interesse juste pour les numero gsm et le montant du consommation par mois;mais le num de tel est precedé de certaines i,formations et apres ya la date ;alors j'ai faite la fonction pour ramener juste le num ,et j'ai une colonne qui contient juste les numero des mois ;1,2,... ,et par la suite je dois ramener tous les numeros de tel avec les consommations selon le mois,si un num de gsm a du montant pour le mois 1,2,3,il doit faire une seule fois le num et placer le montant dans le mois convenable la variable etat je vais essayer avec ta solution ,merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 2 janv. 2008 à 17:47
Tu pourrais aussi modifier ta Functon en utilisant Split
Function extractGSM(chaine) As String
Dim Tablo() As String
'chaine = "MEDITEL TLP GSM 073082427 01/07"
m = WorksheetFunction.Search("0", chaine, 1)
Tablo = Split(m, " ")
'Ici Tablo(0) = "MEDITEL"
'Tablo(1) = "TLP"
'Tablo(3) = "073082427"
'Si c'est tablo(3) que tu veux retourner, tu inscris
extractGSM = Tablo(3)
End Function
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 2 janv. 2008 à 18:08
Donc, avec une Function utilisant Split comme je t'ai donnée, ça devrait bien fonctionner. De plus, si ce n'est pas toujours MEDITEL qui est inscrit, ce sera difficile d'utiliser Mid sans trop savoir combien il y a de caractères...
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA.
ista00
Messages postés8Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention 3 janvier 2008 3 janv. 2008 à 10:49
resalut au faite j'aarive tjr pas j'ai essayé avec le code dont tu m'a consillé mais il le reconnais pas je dois declarer le tabo et ,par la suite tablo(1),tablo(0)et tablo(3) !! je tioens a dire qu'avec la mienne ca marche elle apporte jute le numéro sans predndre en concideration la chaine de caractere,sauf comme j'ai dis la repetition du num de telefone a chaque montant ;dsl
ista00
Messages postés8Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention 3 janvier 2008 3 janv. 2008 à 16:42
oui voila c bon j 'ai essayé de chnger de code voila ca marche avec !!!!
Sub Macro1()
Dim t(12)
Dim test As Boolean
t(1) = "C"
t(2) = "D"
t(3) = "E"
t(4) = "F"
t(5) = "G"
t(6) = "H"
t(7) = "I"
t(8) = "J"
t(9) = "K"
t(10) = "L"
t(11) = "M"
t(12) = "N"
test = False
i = 2
Do While test = False
If Sheet7.Range("E" & i) = "" Then
GoTo san:
End If
If Sheet7.Range("E" & i) = "END" Then
Exit Do
End If
num1 = ""
var1 = InStr(Sheet7.Range("E" & i), "0")
If var1 <> 0 Then
num1 = Mid(Sheet7.Range("E" & i), var1, 9)
End If
j = 2
Do While test2 = False
If Sheet9.Range("B" & j) = "" Then
Sheet9.Range("B" & j) = num1
dt = Sheet7.Range("A" & i)
Sheet9.Range(t(dt) & j) = Sheet7.Range("F" & i)
Exit Do
End If
num2 = ""
var2 = InStr(Sheet9.Range("B" & j), "0")
If var2 <> 0 Then
num2 = Mid(Sheet9.Range("B" & j), var2, 9)
End If
If num1 = num2 Then
dt = Sheet7.Range("A" & i)
Sheet9.Range(t(dt) & j) = Sheet7.Range("F" & i)
Exit Do
End If
j = j + 1
Loop
san:
i = i + 1
Loop
End Sub
ista00
Messages postés8Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention 3 janvier 2008 3 janv. 2008 à 18:43
merci MPi² au fait j'ai des trucs ,que j'arrive pas a regler , ca au rait etet plus simple d'envoyer un fichier qui te montre ca mais j'arrive pas ,je vais essayer de t'expliquer le prob,, merci ;j'abuse là mais j 'espere que tu m'aide , la feuille qu'elle retourne le resulatt contient les cellules , une ou je mets le nom de la feuille , le second pour les num de gsm, et le reste c'est le num des mois ;1,2,3,4,5,6...12; je veux a coté des num des mois afficher le nom du mois aussi ; sachant que je compare entre le num de mois et le num d'enregitrement qui montre la date et c'est dans l'autre feuille ,je veux assi que le code où ya tout ca s'applique sur l'ensemble des feuilles du classeur ; merci et bnne soirée