IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide") [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 61
    Points
    61
    Par défaut problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide")
    Bonjour,

    Je veux qu'une partie de chacune des cellules se trouvant dans une plage spécifique soit copié dans une autre cellule en respectant leur emplacement.C'est à dire si j'ai une cellule I15 qui contient par exemple "c:\Documents and Settings\user123\Application Data\appl.exe" alors la chaine de caractère "user123" soit copié dans L15 et on fait rentrer la chaine de caractère "DSM" dans chacune d'elles.

    Voilà le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Range("a65536").Select
        dernière_ligne2 = Selection.End(xlUp).Row
        Range("I2:I" & dernière_ligne2).Select
        For Each Cell In Selection
        If UCase(Cell.Text) Like "C:\DOCUMENTS AND SETTINGS\*" Then
        Matricule = Mid(UCase(Cell.Text), 27, 7)
        Chemin_fichier = Cell.Value
        Range("D" & Chemin_fichier).FormulaR1C1 = "DSM"
        Range("L" & Chemin_fichier).FormulaR1C1 = Matricule
        End If
        Next
    Normalement lors de l'exécution il y'a une erreur au niveau des deux dernières lignes de code parce que je connais pas la formule exacte pour la copie de cette partie là.
    Le nom de l'erreur est ci-joint.

    Donc merçi pour une réponse et à bientôt.

    Cdt,
    Skipeemed
    Images attachées Images attachées  

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Points : 617
    Points
    617
    Par défaut
    salut

    une plage se définit par des coordonnées et pas par le contenu d'une cellule !

    insère donc une instruction msgbox ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    '......
              Chemin_fichier = Cell.Value
     
              MsgBox "D" & Chemin_fichier ' <<<<=====  ICI
     
             Range("D" & Chemin_fichier).FormulaR1C1 = "DSM"
    '.......

    et dis-nous si tu crois que ce qu'elle affiche te parait définir une plage !
    non, n'est-ce-pas ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Une piste avec le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub aa_pmo()
    Const CIBLE As String = "C:\DOCUMENTS AND SETTINGS\"
    Dim R As Range
    Dim var
    Dim LastLig&
    Dim i&
    Dim A$
    LastLig& = ActiveSheet.[a65536].End(xlUp).Row
    Set R = ActiveSheet.Range("A1:L" & LastLig& & "")
    var = R
    For i& = 1 To LastLig&
      If InStr(1, UCase(var(i&, 12)), CIBLE) > 0 Then
        A$ = Mid(var(i&, 12), Len(CIBLE) + 1)
        var(i&, 9) = Mid(A$, 1, InStr(1, A$, "\") - 1)
      End If
    Next i&
    R = var
    End Sub
    Cordialement.

    PMO
    Patrick Morange

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Je ne sais pas pourquoi vous nommez votre variable "Chemin_fichier" même si cela importe peu, l'erreur n'est pas là (mais cela ne rend pas le code très clair).

    Comme vous l'a dit babaothe, ce n'est pas le contenu de la cellule que vous voulez mais le n° de la ligne concernée.

    Donc, en principe :

    Mais je remplacerais plutôt "Nom_fichier", par exemple, par : "Num_lign"

    Ensuite, vous êtes sûr de vouloir utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("D" & Chemin_fichier).FormulaR1C1 = "DSM"
    Range("L" & Chemin_fichier).FormulaR1C1 = Matricule
    Vous devriez avoir le même résultat avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("D" & Chemin_fichier) = "DSM"
    Range("L" & Chemin_fichier) = Matricule
    Dernière modification par Invité ; 23/10/2010 à 19h42.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Bonjour jacques jean,

    j'ai mis ce code ci-dessous mais ça n'a pas marché, en fait il n'y a aucune erreur. Mais la copie ne marche pas. Voilà le code que j'ai utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Range("a65536").Select
        dernière_ligne2 = Selection.End(xlUp).Row
        Range("I2:I" & dernière_ligne2).Select
        For Each Cell In Selection
        If UCase(Cell.Text) Like "C:\DOCUMENTS AND SETTINGS\*" Then
        Matricule = Mid(UCase(Cell.Text), 27, 7)
        Num_lign = Cell.Row
        Range("D" &  Num_lign)= "DSM"
        Range("L" &  Num_lign)= Matricule
        End If
        Next
    Cdt,
    SKIP

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Bonjour PMO2007,

    J'ai suivi ton code à la lettre mais apparemment ça fonctionne pas surtout au niveau de la ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, UCase(var(i&, 12)), CIBLE) > 0
    Parce que normalement la CiBLE se trouve dans la colonne I. Et puis pour le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A$ = Mid(var(i&, 12), Len(CIBLE) + 1)
    la fonction normalement elle doit avoir trois paramètre.

    [EDIT]

    En fait c'est bon ça marches, j'ai remplacé 12 par 9 et 9 par 12.
    Mais j'aimerai bien comprendre le code. Pour que je puisse le programmer tout seul.

    Merçi,
    Cdt,
    SKIP

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Mais j'aimerai bien comprendre le code. Pour que je puisse le programmer tout seul.
    Voici quelques commentaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub aa_pmo()
    Const CIBLE As String = "C:\DOCUMENTS AND SETTINGS\"
    Dim R As Range
    Dim var As Variant
    Dim LastLig&
    Dim i&
    Dim A$
     
    '--- dernière ligne renseignée de la colonne "A" ---
    LastLig& = ActiveSheet.[a65536].End(xlUp).Row
    '--- affectation de la plage "A1:L dernière ligne" dans la variable R (Range) ---
    Set R = ActiveSheet.Range("A1:L" & LastLig& & "")
    '--- met les valeurs de la plage dans un variant (correspond à un tableau Visual Basic à 2 dimensions) ---
    var = R
    '--- on boucle sur toutes les lignes du tableau ---
    For i& = 1 To LastLig&
      '--- si on trouve CIBLE dans la colonne 9 (I) ...
      If InStr(1, UCase(var(i&, 9)), CIBLE) > 0 Then
        '--- on extrait à partir de longueur de CIBLE + 1 jusqu'à la fin
        '--- et on affecte le résultat dans la variable A$ (String)
        A$ = Mid(var(i&, 9), Len(CIBLE) + 1)
        '--- on extrait à partir du 1er "\" - 1 jusqu'à la fin
        '--- et on met le résultat dans le tableau var(ligne traitée , colonne 12 "L")
        var(i&, 12) = Mid(A$, 1, InStr(1, A$, "\") - 1)
      End If
    Next i&
    '--- on écrit, d'un seul coup, le tableau dans la plage ---
    R = var
    End Sub
    Cordialement.

    PMO
    Patrick Morange

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Bonjour PMO2017,

    Merçi mon pote, j'ai bien compris le code.
    Salut!

    Cdt,
    SKIP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 40
    Dernier message: 21/06/2007, 17h58
  2. problème de couleur de cellule dans une JTable
    Par rprom1 dans le forum Composants
    Réponses: 3
    Dernier message: 04/04/2007, 00h01
  3. Problème de lecture des cellules dans une feuille Excel
    Par wangjun dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/10/2006, 09h35
  4. [VBA-E]Copier une serie de cellules dans une autre feuille
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/03/2006, 17h23
  5. [VBA-E]Interdire la selection de cellule dans une feuille
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/03/2006, 23h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo