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 :

Identification texte, copier dans un autre colonne. Incompatibilité type [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 50
    Par défaut Identification texte, copier dans un autre colonne. Incompatibilité type
    Bonjour, Voici une autre débutante à la recherche d'une solution pour ma macro de mise en forme de budget. Ci-dessous le code

    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
     Dim ws As Worksheet
     'rafraîchissement de la page pour faciliter l'execution de la macro
    Application.ScreenUpdating = False
     
    'déclaration variables pour itération sur la feuille d'après le résultat DligneVid
    Dim CellBud As Integer
    Dim DligneBud As Range
    CellBud = 1
    Set DligneBud = Range("A" & Rows.Count).End(xlUp)
     
        For CellBud = DligneBud To 1 Step -1
            If Cells(CellBud, 1) = "NETTOYAGE" Or "ELIMINATION DES DECHETS" Or "FONCT & ENTRETIEN IMMEUBL" Then
               If Cells(CellBud, 1) = "LIAISONS MECANIQUES" Or "ESPACES VERTS" Or "SECURITE INCENDIE" Then
                  If Cells(CellBud, 1) = "SURVEILLANCE" Or "CLIMATISATION PARTIES COM" Or "FONCTIONNEMENT GENERAL" Then
                    If Cells(CellBud, 1) = "ETAT ET COLLECTIVITES" Or "HONORAIRES" Or "RECETTES" Then
                        If Cells(CellBud, 1) = "PRIVATIFS" Or "CHARGES NON RECURRENTES" Then
                           Cells(CellBud, 12).Value = Cells(CellBud, 1).Value
                        End If
                    End If
                  End If
               End If
            End If
        Next CellBud
    Avec ce code j'obtiens : Erreur d’exécution '13": "incompatibilité de type"
    Pourriez vous me recommander lecture pour le résoudre ou me dire ce qui ne va pas?

    Bien cordialement,
    Victoria

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    Prière de baliser ton code conformément au règles du forum
    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
    Dim CellBud As Integer
    Dim DligneBud As Range
    CellBud = 1
    Set DligneBud = Range("A" & Rows.Count).End(xlUp)
     
    For CellBud = DligneBud To 1 Step -1
    If Cells(CellBud, 1) = "NETTOYAGE" Or "ELIMINATION DES DECHETS" Or "FONCT & ENTRETIEN IMMEUBL" Then
    If Cells(CellBud, 1) = "LIAISONS MECANIQUES" Or "ESPACES VERTS" Or "SECURITE INCENDIE" Then
    If Cells(CellBud, 1) = "SURVEILLANCE" Or "CLIMATISATION PARTIES COM" Or "FONCTIONNEMENT GENERAL" Then
    If Cells(CellBud, 1) = "ETAT ET COLLECTIVITES" Or "HONORAIRES" Or "RECETTES" Then
    If Cells(CellBud, 1) = "PRIVATIFS" Or "CHARGES NON RECURRENTES" Then
    Cells(CellBud, 12).Value = Cells(CellBud, 1).Value
    End If
    End If
    End If
    End If
    End If
    Next CellBud]
    Ce qui est bizarre ds ton projet de code c'est de répéter Cells(CellBud, 1) !!! comme si tu fais le test toujours sur la colonne A !!!
    Aussi essaye d'ajouter : with sheets("NOMTAFEUILLE") au début de code
    Bonne continuation

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    DligneBud étant une variable Range représentant un objet "Cellule Excel", tu ne peux pas l'utiliser telle quelle dans ta boucle

    je pense que tu veux utiliser son numéro de ligne, donc sa propriété DligneBud.Row


    ensuite, tu emboites des tests If qui doivent vérifier si une unique cellule est égale successivement à des valeurs différentes ... chose qui n'arrive jamais !

    et tu utilises mal les opérations logiques dans tes if
    on doit toujours répéter l'expression initiale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If toto = tata Or toto = toutou Or toto = tonton Then

    Je pense que pour avancer plus vite dans l'aide qu'on peut t'apporter, il serait opportun que tu nous expliques concrètement ce que doit faire ta procédure

    d'ailleurs, à propos de procédure, j'ai quand même bien l'impression qu'une simple formule Excel répond au besoin : si une cellule possède l'une des valeurs parmi X valeurs possibles, alors on écrit cette valeur dans la colonne 12 de la même ligne

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Attention aux différents objest et type de variables que tu utilises. Au début, tu déclares :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim CellBud As Integer
    Dim DligneBud As Range
    Donc, il faut que tu manipules DlignBud comme un Range !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DligneBud = Range("A" & Rows.Count).End(xlUp)
    Ici tout va bien, mais là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For CellBud = DligneBud To 1 Step -1
    Ca ne va plus. Tu fais une boucle sur CellBud qui est un entier, donc tu dois le faire aller d'un entier vers un autre, or DligneBud est un Range et pas un entier ! Si je comprend bien, tu veux récupérer le numero de ligne de la cellule DligneBud, il faut donc que tu fasses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For CellBud = DligneBud.Value To 1 Step -1
    Tes noms de variables et objets prêtent à confusion : CellBud est un entier et DligneBud est une cellule...
    Autre commentaire sur ton code :
    Si je ne m'intéresse qu'au 2 premiers If :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Cells(CellBud, 1) = "NETTOYAGE" Or "ELIMINATION DES DECHETS" Or "FONCT & ENTRETIEN IMMEUBL" Then
        If Cells(CellBud, 1) = "LIAISONS MECANIQUES" Or "ESPACES VERTS" Or "SECURITE INCENDIE" Then
            Cells(CellBud, 12).Value = Cells(CellBud, 1).Value
        End If
    End If
    Je traduis en français : Si la valeur de la cellule de la ligne CellBud et de la colonne n°1 est égale à NETTOYAGE ou ELIMINATION DES DECHETS ou FONCT & ENTRETIEN IMMEUBL et si cette même valeur est égale à LIAISONS MECANIQUES ou ESPACES VERTS ou SECURITE INCENDIE alors ....
    Si la première condition est vrai , la deuxième ne pourra jamais être vraie, car une cellule a une seule et unique valeur. Tu ne respecteras jamais tes conditions ...
    Que veux-tu faire exactement?

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 50
    Par défaut
    Merci beaucoup pour vos commentaires.
    En effet, je souhaite que la procédure balaye entre les différents conditions et une fois trouve une d'entre elles, elle dois copier le contenu de la cellule dans la colonne 12. Et oui, autant la recherche est faite sur la première colonne sur toutes les lignes depuis la dernière ligne non vide jusqu'au début de la feuille. Je vais essayer un autre code et je vous l'envoie. A plus tard,

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    je souhaite que la procédure balaye entre les différents conditions et une fois trouve une d'entre elles, elle dois copier le contenu de la cellule dans la colonne 12.
    Alors il faut un seul If et que des Or.

  7. #7
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 50
    Par défaut
    Voici nouveau code, mais avec erreur: toujours sur l'incompatibilité de type malheureusement,

    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
    Dim DligneBud As Range
    Dim Cellb, dest, orig As Range
    Set Cellb = Range("A" & Rows.Count).End(xlUp)
    Set DligneBud = Range("A" & Rows.Count).End(xlUp)  'dernièr numero de la dernièr ligne
    dest = Cells(Cellb, 12).Value
    orig = Cells(Cellb, 1).Value
     
    For Each Cellb In DligneBud
       Select Case Cellb.Value
       Case "NETTOYAGE", "ELIMINATION DES DECHETS", "FONCT & ENTRETIEN IMMEUBL", "LIAISONS MECANIQUES", "ESPACES VERTS", _
            "SECURITE INCENDIE", "SURVEILLANCE", "CLIMATISATION PARTIES COM", "FONCTIONNEMENT GENERAL", "ETAT ET COLLECTIVITES", _
            "HONORAIRES", "RECETTES", "PRIVATIFS", "CHARGES NON RECURRENTES"
       Case Else
           dest = orig
       End Select
    Next Cellb

  8. #8
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DligneBud = Range("A" & Rows.Count).End(xlUp)  'dernièr numero de la dernièr ligne
    Tu dis que DligneBud est 1 cellule, donc ta boucl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Cellb In DligneBud
    est une bouclé sur 1 cellule.
    D'autre part, dans tes déclarations, ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Cellb, dest, orig As Range
    ne délcare pas correctement toutes les variables, il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Cellb As Range, dest As Range, orig As Range
    Ensuite pourquoi attribues-tu une valeur à Cellb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cellb = Range("A" & Rows.Count).End(xlUp)
    Cellb est là pour faire la boucle, il ne faut pas lui donner une valeur en amont.
    Enfin, dans ton Select Case, tu ne mets aucune action dans le cas où la valeur est bien égale à ce que tu veux. Il ne se passer donc rienest-ce normal?

    Question : sur quelle ligne apparaît l'erreur ?

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    ce message d'erreur intervient quand l'auteur du code mélange torchons & serviettes !
    Juste en lisant l'aide de la fenêtre de l'erreur …
    Vérifier donc le type des variables de la ligne déclenchant l'erreur (?) et s'il y lieu le type attendu de la propriété …

    ___________________________________________________________________________________________________________
    Je suis Paris, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

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

Discussions similaires

  1. [XL-2016] trier 2 colonnes et les copier dans 2 autres colonnes
    Par Mod77 dans le forum Excel
    Réponses: 6
    Dernier message: 22/09/2016, 15h31
  2. Copier du texte sélectionné dans un autre doc word
    Par Phoenix311 dans le forum VBA Word
    Réponses: 6
    Dernier message: 21/06/2013, 23h17
  3. [XL-2010] Copier les cellules d'une colonne dont la valeur à changé dans une autre colonne
    Par caeruleum dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/09/2012, 22h01
  4. Réponses: 1
    Dernier message: 11/03/2010, 14h47
  5. Réponses: 2
    Dernier message: 26/07/2006, 10h03

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