Exemple de code pour exel

Signaler
Messages postés
13
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
12 juin 2009
-
Messages postés
13
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
12 juin 2009
-
Bonjour tt le monde
je suis débutant en vb et j'ai un classeur dont je m'interresse à une colonne qui presente des texts  avec des cellules vides, et puisque la liste est trés longues, je veux quelqu'un qui m'aide à réaliser un code qui me permet de choisir les 3 premières caractères de chaque cellule non vide et l'inscrit dans la cellule suivante qui est vide dans le sens du haut vers le bas et merci in finiment.
Voici l'exemple que je veux:
  
<colgroup><col style=\"WIDTH: 60pt\" span=\"6\" width=\"80\" /></colgroup>----
, avant l'execution du code, , , apres l'execution du code, , ----
, , , , , , ----
, , , , , , ----
, maaaaalkjui, , , maa, , ----
,  , , , maa, , ----
,  , , , maa, , ----
,  , , , maa, , ----
,  , , , maa, , ----
, dsfdfdfddf, , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
,  , , , dsf, , ----
, qddffgghj, , , qdd, , ----
,  , , , qdd, , ----
,  , , , qdd, , ----
,  , , , qdd, , ----
,  , , , qdd, , ----
, hghghujk, , , hgh, , ----
,  , , , hgh, , ----
,  , , , hgh, , ----
,  , , , hgh, , ----
,  , , , hgh, , ----
,  , , , hgh, , ----
,  , , , hgh, , ----
, jjghjghjj, , , jjg, , ----
,  , , , jjg, , ----
,  , , , jjg, , ----
,  , , , jjg, , ----
,  , , , jjg, , ----
,  , , , jjg, , ----
,  , , , jjg, , ----
, jhyhrtrty, , , jhy, , ----
,  , , , jhy, , ----
,  , , , jhy, , ----
,  , , , jhy, , ----
,  , , , jhy, , ----
,  , , , jhy, , ----
,  , , , jhy

Merci encore une Fois

13 réponses

Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010

Bonjour
Une solution parmi d'autres

Sub TroisPremieres()
    Dim plage As Range, c As Range, quoi As String, Colon As Integer
    Colon = 3
   
    Set plage = Range(Cells(1, Colon).End(xlDown), Cells(10000, Colon).End(xlUp))
          
    For Each c In plage
        If Not IsEmpty(c) Then
            quoi = Left(c.Value, 3)
        End If
        c.Offset(, 1) = quoi
    Next
End Sub

CNTJC
Messages postés
13
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
12 juin 2009

Bonjour   cnt
Merci beaucoup pour l'attention que tu as donné à mon problème, mais en éxecutant ce code rien ne s'est passé il se peut que j'ai pas su comment l'executer


Très génereux d'avoir m'expliquer un peut ce code et comment l'executer


Merci infiniment.
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010

Bonjour
La procédure peut être placée dans un module pour être appelée soit par un click d'un objet (ex: commandbutton, etc...) ou de quelque autre façon (action dans UserForm, ...).
Il faut évidement attribuer à la variable "Colon", la colonne de la plage qui t'intéresse
La colonne concernéé peut être passée en argument à la Sub :

Sub TroisPremieres( By Val Colon as Integer )
    Dim plage As Range, c As Range, quoi As String
     ... suite code ...

J'espère avoir été clair
Salut
CNTJC
Messages postés
13
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
12 juin 2009

Bonjour cnt


Merci beaucoup ça  a très bien marché avec le premier code, mais un petit problème c'est que la première ligne etant non vide ne se transforme pas et si la transformation est faite, elle ne se fait qu'a partir de la cellule dont la suivante est vide voir l'exemple comme suit:


<colgroup>
<col style=\"WIDTH: 60pt\" width=\"80\" />
<col style=\"WIDTH: 20pt; mso-width-source: userset; mso-width-alt: 950\" width=\"26\" />
<col style=\"WIDTH: 67pt; mso-width-source: userset; mso-width-alt: 3254\" width=\"89\" />
<col style=\"WIDTH: 22pt; mso-width-source: userset; mso-width-alt: 1060\" width=\"29\" />
<col style=\"WIDTH: 60pt\" width=\"80\" />
<col style=\"WIDTH: 30pt; mso-width-source: userset; mso-width-alt: 1462\" width=\"40\" />
<col style=\"WIDTH: 226pt; mso-width-source: userset; mso-width-alt: 11008\" width=\"301\" />
</colgroup>

----

q

sdsdsd
,

,
 ,

,
qsd,

,
qsd,

----

 ,

,
 ,

,
qsd,

,
qsd,

----

 ,

,
 ,

,
qsd,

,
qsd,

----

m
acggg
,

,
mac,

,
mac,

,
qsd,

----

c
achjuy
,

,
cac,

,
cac,

,
qsd,

----

d
sfsdfsdf
,

,
dsf,

,
dsf,

,
qsd,

----

j
kljklkiuyi
,

,
jkl,

,
jkl,

,
qsd,

----

 ,

,
jkl,

,
jkl,

,
qsd,

----

 ,

,
jkl,

,
jkl,

,
qsd,

----

q

bbfgtr
,

,
qbb,

,
qbb,

,
qbb,

----

q
fgtrter
,

,
cfg,

,
cfg,

,
qfg,

----

 ,

,
cfg,

,
cfg,

,
qfg,

----

 ,

,
cfg,

,
cfg,

,
qfg,

----

h

hyrtuik
,

,
hhy,

,
hhy,

,
qfg,

----

 ,

,
hhy,

,
hhy,

,
qfg,

----

 ,

,
hhy,

,
hhy,

,
qfg,

----

l'existant,

,
ce que j'ai obtenu après l'execution du code,

,
ce qu'il faut obtenir,

,
ce que je veux reélement c'est  introduire un paramettre qui me permet d'appliquer le code à tous les mots qui commencent par exemple par "q" et qui s'inscrivent dans la cellule suivante même si elle est non vide à condition qu'elle ne commence pas par "q" voir l'exemple si dessus
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010

Bonjour Cherki,
Voit avec ce qui suit

    Dim plage As Range, c As Range, quoi As String, Oldquoi As String, Colon As Integer, carac As String
    Colon = 1
    carac = "q"
    Set plage = Range(Cells(1, Colon), Cells(10000, Colon).End(xlUp))
         
    For Each c In plage
        If Not IsEmpty(c) Then
            quoi = Left(c.Value, 3)
            If Left(quoi, 1) = carac Then
                oldquoi = quoi
            End If
        End If
        c.Offset(, 1) = oldquoi
    Next

par contre si le premier mot ne commence pas par le caractère de choix, ici "q", que doit-on faire?

Tchao

CNTJC
Messages postés
13
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
12 juin 2009

Bonjour cnt
Merci beaucoup beaucoup beaucoup, c'est bien ce que je veux et ceci m'a tellement satisfait
Pour ta question apropos de la lettre "q" il n'y a pas de problème parcequ'elle est  fixe et inchangeable.
Merci encore une fois et que dieu te protege.
A bientôt.
Messages postés
13
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
12 juin 2009

Rebonjour CNT
Encore une toute petite question, comment faire si je veux que le code s'applique jusqu'à la dernière ligne non vide?
Merci
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010

Re,
Mon code prend en compte la dernière cellule non vide par la référence détectée par ce qui est en rouge
Set plage = Range(Cells(1, Colon),Cells(10000, Colon).End(xlUp))

bonne continuation
Messages postés
13
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
12 juin 2009

Daccord CNT, et execuser moi si je suis un peux génant, 
Est ce que c'est possible maintenant d'executer cette macro à partir d'un bouton d'une application acces? Ou bien la convertion de cette macro excel en acces tout en réalisant le même travail?
Merci.
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010

Désolé je ne pratique pas ACCESS

CNTJC
Messages postés
13
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
12 juin 2009

Bonjour cnt

Encore c'est moi, je veux vraiment que tu m'aide sur ce petit problème, j'ai etabli ce petit code par lequel j'ai voulu executé une macro excel 2007 depuis acces2007

Private Sub Commande8_Click()
Dim strMonFichierExcel As String
   
strMonFichierExcel = strRepertoireExcel & "C:\FINAL.XlSX"
 
MsgBox strMonFichierExcel 'Uniquement pour vérifier si le chemin est correct
   
Dim appExcel As Object
 
Set appExcel = CreateObject("Excel.Application")
 
appExcel.Visible = true
 
With appExcel
 
    .Workbooks.Open strMonFichierExcel
 
    .Run "PERSONAL.XLSB!macro1" 'cette macro je l'ai creé dans un classeur de macro personnel
 
End With
Set appExcel = Nothing
End Sub
Mais le message suivant me perturbe: "Erreur d'execution 1004         Erreur definie par l'application ou par l'objet" Fin du message. Je ne sais quoi faire?
Merci beaucoup de m'aider.
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010

Bonjour
l'erreur que tu mentionnes est due à ".Run ....". Alors question ? si c'est un autre classeur il faut qu'il soit ouvert, ce que tu ne dis pas. Pour pouvoir exécuter les macros de PERSONAL.XLSB , celui-ci doit ce trouver dans la même instance Excel, ce qui ne semble pas être le cas.
Décrit plus explicitement l'environnement de ton projet, pour voir plus clair.
A+

CNTJC
Messages postés
13
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
12 juin 2009

Bonjour cnt
Merci pour tes aides et conseils pertunants, pour éviter tous les problèmes liés avec l'ouverture des classeurs et macro excel, je veux que tu me transforme le code que tu m'a offert à savoir:

Sub convertir()
Dim plage As Range, c As Range, quoi As String, Oldquoi As String, Colon As Integer, carac As String
    Colon = 1
    carac = "J"
  
     Set plage = Range(Cells(2, Colon), Cells(100000, Colon).End(xlUp))
         
    For Each c In plage
        If Not IsEmpty(c) Then
            quoi = Left(c.Value, 6)
            If Left(quoi, 1) = carac Then
                Oldquoi = quoi
          
            End If
        End If
        c.Offset(, 0) = Oldquoi
    Next
   
End Sub
en un code que je peux exécuterà partir d'un userform à l'aide d'un click sur un btn.
Merci beaucoup.