Macro BVA- Incompatibilité de type

Résolu
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. 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. 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
  2. ok
    Pourquoi Google n'est pas bien ?

    https://www.cjoint.com/c/JFdoINqANZn
    0
    1. 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
    2. @Yoyo01000Merci 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
  3. 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. Merci beaucoup pour ces explications !

      Bonne journée
      0
  4. > 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. Une erreur ici
      Select Case Range("B9").Value
      lire
      Select Case Range("D9").Value
      Cdlmnt
      0
    2. 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. 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. 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
  5. 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. 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
    2. @ccm81Merci ccm81 :)
      0
  6. 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. 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
    2. @Yoyo01000Ok super merci !
      0