Macro BVA- Incompatibilité de type

Résolu
A_0504 Messages postés 9 Statut Membre -  
Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,
J'ai créer une macro il y a peu et lorsque que je veux la lancer le message "Incompatibilité de type" s'affiche.
Ma macro est une série de Si et FinSi.
Elle doit afficher quelque chose quand elle trouve le bon nombre dans une case, ce quelle fait. Mais le message s'affiche quand même.

Pouvez-vous m'aider ?

PS : il y a un autre problème : la macro doit faire ce que j'ai décrit pour plusieurs ligne mais seul la première ligne s'affiche.

7 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Difficile de t'aider sans voir
    Envoies ton fichier sur https://mon-partage.fr/ et joins le lien obtenu à ton prochain message

    Cdlmnt
    0
  2. A_0504 Messages postés 9 Statut Membre
     
    Première fois que j'utilise le forum désolé

    voici un lien Google Drive : https://accounts.google.com/ServiceLogin?service=wise&passive=1209600&continue=https://drive.google.com/drive/folders/1FHPzEgLMIo-Fx7RQ1G8J3BMFlzC_k6Zk?usp%3Dsharing&followup=https://drive.google.com/drive/folders/1FHPzEgLMIo-Fx7RQ1G8J3BMFlzC_k6Zk?usp%3Dsharing

    La macro s'appelle Planning_1
    et pour l'executer il faut cliquer sur le case RESULTAT dans la feuille Données
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      Utilises le service de https://mon-partage.fr/ pour envoyer ton fichier
      0
    2. Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention   168
       
      La prochaine fois, évite de passer par Google !

      Il y a soit le lien fourni par ccm81, soit celui-ci :

      https://www.cjoint.com/
      0
  3. A_0504 Messages postés 9 Statut Membre
     
    ok
    Pourquoi Google n'est pas bien ?

    https://www.cjoint.com/c/JFdoINqANZn
    0
    1. Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention   168
       
      Non, pas là car il faut demander l'accès au fichier, c'est une perte de temps ;)

      J'ai regardé ton fichier, lancé toutes les macros (OMG) et je n'ai rien décelé.

      à quel moment il y a un problème, quand tu fais/lances quoi ?
      0
      1. A_0504 Messages postés 9 Statut Membre > Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention  
         
        Merci de la réponse.

        Et bien quand plusieurs Tache sont affichées (exemple : Tache A, Tache B et Tache C) et que je lance la macro Toutes_ensemble avec le bouton RESULTAT sur la page Données, un message d'erreur s'affiche : Incompatibilité de type

        L'incompatibilité de type est sur le début d'un SI (Macro Planning_1) qui est le chiffre d'après celui dans la cellule Données!D9. et si je change d'un nombre en D9, l'erreur se déplace d'un nombre aussi...
        Ex : j'ai saisi 1 dans Données!D9
        Incompatibilité de type pour SI Données!C9 = 2 FAIRE

        C'est peut-être le fait de les lancer toute en même temps qui pose problème ?
        0
  4. Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention   168
     
    C'est normal, tu dis à ta macro SI D9 = 6 mais ça ne fonctionne pas tout comme ça aurait bloqué avant SI D9 = 2 ;)

    Correctif avec des Else ("sinon") :

    Sub Planning_1()
    '
    'Planning_1 Macro
    '

    '
    If Range("B9") = "Tache A" Then
    If Range("D9") = 1 Then
    Sheets("Banque_de_données").Select
    Range("C7:F7").Copy
    Sheets("Planning").Select
    Range("A9:D9").Select
    ActiveSheet.Paste
    Else
    If Range("D9") = 2 Then
    Sheets("Banque_de_données").Select
    Range("C7:F8").Copy
    Sheets("Planning").Select
    Range("A9:D10").Select
    ActiveSheet.Paste
    Else
    If Range("D9") = 3 Then
    Sheets("Banque_de_données").Select
    Range("C7:F9").Copy
    Sheets("Planning").Select
    Range("A9:D11").Select
    ActiveSheet.Paste
    Else
    If Range("D9") = 4 Then
    Sheets("Banque_de_données").Select
    Range("C7:F10").Copy
    Sheets("Planning").Select
    Range("A9:D12").Select
    ActiveSheet.Paste
    Else
    If Range("D9") = 5 Then
    Sheets("Banque_de_données").Select
    Range("C7:F11").Copy
    Sheets("Planning").Select
    Range("A9").Select
    ActiveSheet.Paste
    Else
    If Range("D9") = 6 Then
    Sheets("Banque_de_données").Select
    Range("C7:F12").Copy
    Sheets("Planning").Select
    Range("A9:D14").Select
    ActiveSheet.Paste
    End If
    End If
    End If
    End If
    End If
    End If
    End If


    0
    1. A_0504 Messages postés 9 Statut Membre
       
      Merci beaucoup pour ces explications !

      Bonne journée
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    > A_0504.
    1. Beaucoup à redire dans le code, en particulier une foule de Select qui ne sont pas utiles
    Par exemple dans ton module 3, la procédure Tache_B() qu'on peut démarrer comme ceci (les bordures peuvent être traitées en bloc
    Sub Tache_BB()
    '
    ' Tache_B Macro
    '
    Sheets("Données").Select
    Range("B10").Value = "Tache B"
    Range("C10").Value = "0"
    Range("D10").FormulaLocal = "=SI(C10<$H$9*$F$11+1;1;SI(C10<2*$H$9*$F$11+1;2;SI(C10<3*$H$9*$F$11+1;3;SI(C10<4*$H$9*$F$11+1;4;SI(C10<5*$H$9*$F$11+1;5;SI(C10<6*$H$9*$F$11+1;6;SI(C10<7*$H$9*$F$11+1;7;SI(C10<8*$H$9*$F$11+1;8;""MO non-disponible""))))))))"
    With Range("C10:D10").Borders
      .LineStyle = xlContinuous
      .ColorIndex = 0
      .Weight = xlThin
    End With
    .....
    End Sub


    2. J'ai un peu simplifié le code proposé par Yoyo1000 en évitant les If ... Then ... else

    Option Explicit
    
    Sub Planning_1()
    '
    'Planning_1 Macro
    '
    If Range("B9") = "Tache A" Then
      Sheets("Banque_de_données").Select
      Select Case Range("B9").Value
        Case 1: Range("C7:F7").Copy
                Sheets("Planning").Select
                Range("A9:D9").Select
                ActiveSheet.Paste
        Case 2: Range("C7:F8").Copy
                Sheets("Planning").Select
                Range("A9:D10").Select
                ActiveSheet.Paste
        Case 3: Range("C7:F9").Copy
                Sheets("Planning").Select
                Range("A9:D11").Select
                ActiveSheet.Paste
        Case 4: Range("C7:F10").Copy
                Sheets("Planning").Select
                Range("A9:D12").Select
                ActiveSheet.Paste
        Case 5: Range("C7:F11").Copy
                Sheets("Planning").Select
                Range("A9").Select
                ActiveSheet.Paste
        Case 6: Range("C7:F12").Copy
                Sheets("Planning").Select
                Range("A9:D14").Select
                ActiveSheet.Paste
      End Select
    End If
    End Sub

    Cdlmnt
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      Une erreur ici
      Select Case Range("B9").Value
      lire
      Select Case Range("D9").Value
      Cdlmnt
      0
    2. Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention   168
       
      Bonsoir ccm81, je n'ai pas pris le temps d’alléger son code car il y avait matière à !

      Et puis, j'ai pensé qu'il est plus compréhensif pour lui, malgré cette énorme quantité de .Select(ion) :)

      Bonne soirée à vous.
      0
    3. A_0504 Messages postés 9 Statut Membre
       
      Oui je pense bien qu'il est possible d'alléger tout ca car je vient de commencer à coder en VBA donc je ne connais pas tout :(
      Et pour me justifier sur le nombre de répétition, c'est juste que j'ai copier-coller le code que j'avais fait pour une solution pour toute les autres.
      Mais merci beaucoup pour le code je vais essayer ca de suite !

      Bonne journée
      0
    4. A_0504 Messages postés 9 Statut Membre
       
      J'ai essayer ton code mais il ne fonctionnent pas, il ne donne q'une seul personne en final dans la feuille planning. Mais pas de soucis j'ai pris celui de Yoyo qui fonctionne très bien.

      Merci de ton aide malgré tout
      0
  7. Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention   168
     
    Il y a l'erreur remarquée par ccm81 et il y en avait une autre :

    Range("A9:").Select => Range("A9:D13").Select

    If Range("B9") = "Tache A" Then
    Sheets("Banque_de_données").Select
    Select Case Range("D9").Value
    Case 1: Range("C7:F7").Copy
    Sheets("Planning").Select
    Range("A9:D9").Select
    ActiveSheet.Paste
    Case 2: Range("C7:F8").Copy
    Sheets("Planning").Select
    Range("A9:D10").Select
    ActiveSheet.Paste
    Case 3: Range("C7:F9").Copy
    Sheets("Planning").Select
    Range("A9:D11").Select
    ActiveSheet.Paste
    Case 4: Range("C7:F10").Copy
    Sheets("Planning").Select
    Range("A9:D12").Select
    ActiveSheet.Paste
    Case 5: Range("C7:F11").Copy
    Sheets("Planning").Select
    Range("A9:D13").Select
    ActiveSheet.Paste
    Case 6: Range("C7:F12").Copy
    Sheets("Planning").Select
    Range("A9:D14").Select
    ActiveSheet.Paste
    End Select
    End If


    à retester

    Au passage, ccm81, quelle balise de code utilises-tu pour VBA ?

    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      Salut Yoyo01000

      1. Merci d'avoir corrigé l'erreur (le doigt a du rester un peu trop sur la touche Suppr)
      2. Pour la balise de code c'est l’icône flèche vers le bas (l'avant dernière) et tu choisis Basic
      3. Le mieux, c'est de tout mettre dans la même macro ! Sinon, en condensé, tu utilises Call en lui attribuant le nom du module & de la macro.
      Le plus simple, mettre la procédure/fonction dans un module général (Module 1, ...) et de les déclarer publiques pour éviter lors d'un appel de préciser le module

      Bonne soirée à toi
      0
      1. Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention   168 > ccm81 Messages postés 11033 Statut Membre
         
        Merci ccm81 :)
        0
  8. A_0504 Messages postés 9 Statut Membre
     
    J'ai un autre petit problème : saurez-vous comment exécuter plusieurs macro en même temps grâce à une macro ?

    Merci
    cordialement
    0
    1. Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention   168
       
      Le mieux, c'est de tout mettre dans la même macro ! Sinon, en condensé, tu utilises Call en lui attribuant le nom du module & de la macro.
      0
      1. A_0504 Messages postés 9 Statut Membre > Yoyo01000 Messages postés 1720 Date d'inscription   Statut Membre Dernière intervention  
         
        Ok super merci !
        0