Réaliser une répétition de ma macro

Réaliser une répétition de ma macro - VB/VBA/VBS - Programmation

Marsh Posté le 07-04-2010 à 17:01:52    

Bonjour,
 
Je préfére réalisé un autre Sujet pour éviter de polluer mon autre Post et pour facilié la recherche de réponses à ma question.
Monsieurs les Modérateurs, je ne sais pas si cela va dans le sens de votre travail. Si ce n'est pas le cas je posterais mes questions sur un même post.
 
Alors voila, j'ai créer une macro sous excel qui me permet de supprimer les valeurs aprés le caractére "/" et le caractére lui même.
Comme je débute je suis passé par plusieurs étapes:
1 - localiser la cellule comportant un "/"
2 - supprimer les valeurs apres le "/" et le "/" en lui même
3 - regrouper ces deux macro par une condition IF
 
j'obtiens :
 
If Cells.Find(What:="/", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False).Activate Then ActiveCell = Left(ActiveCell, InStr(ActiveCell, "/" ) - 1)
 
Cette macro ne fonctionne que pour une seule cellule, alors qu'il y en a beaucoup plus à modifier.
 
Je voudrais donc que la modification se réalise jusqu'à ce qu'il n'y ait plus de cellule comportant un "/"
 
C'est la que je n'arrive pas à trouver des infos sur la commande à adopter (goto, For next = j'ai vu que cela était utilisé mais j'en sais pas plus dessus)
 
Cordialement,

Reply

Marsh Posté le 07-04-2010 à 17:01:52   

Reply

Marsh Posté le 07-04-2010 à 18:52:13    

bonjour,
Pourquoi ne pas utiliser l'aide d'Excel sur Find ?
Tu aurais trouvé ceci :
 

Code :
  1. Sub test()
  2. With ActiveSheet.Cells
  3.     Set c = .Find("/", LookIn:=xlValues)
  4.     If Not c Is Nothing Then
  5.     S = c.Value
  6.         firstAddress = c.Address
  7.         Do
  8.             c.Value = Left(S, InStr(S, "/" ) - 1)
  9.             Set c = .FindNext(c)
  10.         Loop While Not c Is Nothing And c.Address <> firstAddress
  11.     End If
  12. End With
  13. End Sub


 
A+

Reply

Marsh Posté le 07-04-2010 à 21:09:45    

Et bien à mon grand regret je ne dispose que de Office 2000 au boulot et l'aide sur les macro n'a pas été installé.  
 
Je vais essayé de remédié à ça.
 
Je te remercie pour ton code je le testerais demain à la première heure ! ^^
Par contre faut que je décortique ça car c'est du chinois là, et je n'aime pas faire des choses que je ne maitrise pas, surtout pour le travail.
 
Je vous tiens au courant

Reply

Marsh Posté le 08-04-2010 à 09:18:21    

Lorsque je fait fonctionner ta macro j'obtiens une erreur sur la ligne 10 :
 

Code :
  1. Sub test()
  2. With ActiveSheet.Cells
  3.     Set c = .Find("/", LookIn:=xlValues)
  4.     If Not c Is Nothing Then
  5.     S = c.Value
  6.         firstAddress = c.Address
  7.         Do
  8.             c.Value = Left(S, InStr(S, "/" ) - 1)
  9.             Set c = .FindNext(c)
  10.         Loop While Not c Is Nothing And c.Address <> firstAddress
  11.     End If
  12. End With
  13. End Sub

Reply

Marsh Posté le 08-04-2010 à 09:19:30    

Cependant la fonction a bien marchée puisqu'elle a bien supprimer le "/" et ce qu'il y a aprés. et ce pour l'ensemble des cellules. Donc je pense que l'erreur viens du "bouclage" de la commande. la fin de la répétition lorsqu'il n'y a plus de case à modifier semble poser probléme. Aprés savoir comment cela se traduit en VBA est une autre histoire ^^


Message édité par GohanSSj2 le 08-04-2010 à 09:21:53
Reply

Marsh Posté le 08-04-2010 à 10:50:32    

Bon voila ou j'en suis:
Lorsque j'écrit ce code à partir de l'aide Excel (oui j'ai reussi à me débrouiller :) ):

Code :
  1. Sub test2()
  2. With ActiveSheet.Cells()
  3.     Set c = .Find("/", LookIn:=xlValues)
  4.     If Not c Is Nothing Then
  5.         firstAddress = c.Address
  6.         Do
  7.             c.Interior.Pattern = xlPatternGray50
  8.             Set c = .FindNext(c)
  9.         Loop While Not c Is Nothing And c.Address <> firstAddress
  10.     End If
  11. End With
  12. End Sub


Tout marche correctement, l'ensemble de mes cases comportant un "/" se retrouve grisées.
Mais dés que je tente d'insérer la modification de la valeur de la cellule par  

Code :
  1. ActiveCell = Left(ActiveCell, InStr(ActiveCell, "/" ) - 1)


ou le code de galopin01 (avec S = c.value):

Code :
  1. c.Value = Left(S, InStr(S, "/" ) - 1)


Et bien ça ne marche pas, cela renvoie une erreur sur la ligne:

Code :
  1. Loop While Not c Is Nothing And c.Address <> firstAddress


 
une idée ?

Reply

Marsh Posté le 08-04-2010 à 11:02:32    

L'erreur en question est:
 
Erreur d'exécution '91':
Variable objet ou variable de bloc With non définie

Reply

Marsh Posté le 08-04-2010 à 14:02:05    

bonjour,
Désolé, ça devait pas tourner bien rond hier  :pt1cable:  
Je te donne la macro corrigée car en plus celle d'hier était boguée !
ça fonctionne mais je n'ai pas trouvé pourquoi le message d'erreur ?
Je m'en tire avec une pirouette (On error resume next)
Mébon, si quelqu'un est capable de dire pourquoi le message d'erreur ça serait mieux !
 
Sub test()
On Error Resume Next
With ActiveSheet.Cells
    Set c = .Find("/", LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
        S = c.Value
        S = Left(S, InStr(S, "/" ) - 1)
        c.Value = S
        Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
End Sub
 
A+

Reply

Marsh Posté le 09-04-2010 à 11:37:17    

Merci en fait j'ai reussi à trouver une solution de rechange, comme tout mes codes avaient 10 caractéres avant le "/" j'ai demandé d'afficher uniquement les 10 permiers mais je garde ton code sous la main au cas ou une circontance ferais que cette méthode ne soit plus valable.
 
Un p'tit coup d'oeil ici pour voir les codes:
http://forum.hardware.fr/hfr/Progr [...] 8440_1.htm
 
Cordialement,

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed