Macroexcel

Signaler
Messages postés
8
Date d'inscription
mardi 7 décembre 2004
Statut
Membre
Dernière intervention
3 janvier 2008
-
Messages postés
8
Date d'inscription
mardi 7 décembre 2004
Statut
Membre
Dernière intervention
3 janvier 2008
-
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

10 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Nous non plus on ne sait pas c'est quoi le problème ...

Si tu mettais le bout de code qui ne fonctionne pas et si tu expliquais un peu mieux on pourrait peut-être aider ... et je dis bien peut-être ...

MPi²
Messages postés
8
Date d'inscription
mardi 7 décembre 2004
Statut
Membre
Dernière intervention
3 janvier 2008

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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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.
Messages postés
8
Date d'inscription
mardi 7 décembre 2004
Statut
Membre
Dernière intervention
3 janvier 2008

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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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.
Messages postés
8
Date d'inscription
mardi 7 décembre 2004
Statut
Membre
Dernière intervention
3 janvier 2008

au faite la 'chaine = "MEDITEL TLP GSM 073082427 01/07" est dans une seule colone et moi je veux retourner que le num ;
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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.
Messages postés
8
Date d'inscription
mardi 7 décembre 2004
Statut
Membre
Dernière intervention
3 janvier 2008

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
Messages postés
8
Date d'inscription
mardi 7 décembre 2004
Statut
Membre
Dernière intervention
3 janvier 2008

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
Messages postés
8
Date d'inscription
mardi 7 décembre 2004
Statut
Membre
Dernière intervention
3 janvier 2008

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