Problème avec fonction si dans macro

amandine.amara Messages postés 5 Statut Membre -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous, voilà je me lance pour la première fois dans les macros et la fonction si mais j'ai un petit problème.
Alors voilà selon le texte indiqué dans une cellule je souhaite copier et coller plusieurs tableaux dans un autre fichier
voici mon code:

If c23 = "aerzen-MSB7" Then
Sheets("aerzen-MSB7").Select
Range("A1:O61").Select
Selection.Copy
Sheets("Feuil4").Select
Range("D21").Select
ActiveSheet.Paste
If c23 = "adicomp-renner" Then
Sheets("Adicomp-renner").Select
Range("A1:G63").Select
Selection.Copy
Sheets("Feuil4").Select
Range("D21").Select
ActiveSheet.Paste

End If

End Sub

mais cela ne fonctionne pas j'ai un message qui m'indique bloc if sans end if. Je ne comprend pas pourtant il est bien indiqué

4 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Ce n'est qu'un partie de ton code !!!

    c23 est une variable , comment est est-elle initialisée ?
    Avec VBA, il faut absolument éviter d'utiliser .Select

    La programmation exige beaucoup de rigueur, voici quelques conseils qui t'éviterons bien des déboires :

    commences tous les modules par Option Explicit, cela oblige à déclarer toutes les variables
    • déclares les variables avec le type ad hoc (i.e. pas toutes en Variant)
    • limites leur portée au strict nécessaire (i.e. locale, privée, publique ou globale) ;
    • envisages tous les types potentiels de chaque variable pour éviter les erreurs ;
    • dans le doute prévois un gestionnaire d"erreur ;
    n'utilises jamais .Select, évites d'utiliser les objets actifs : Selection, Activecell, Activesheet, ... ;
    • évites les références implicites(i.e. partielles), privilégies les références explicites (i.e. suffisamment complètes),
    --- par exemple, au lieu de
    = Cells(1,2)
    écrire
    = Worksheets(1).Cells(1,2).Value
    ,
    donc, précises toujours la feuille pour un objet Range (Cells, Rows, ...) et la propriété cible (Value, Text, ...)
    n'hésites pas à utiliser des variables pour représenter les objets, ça facilite l'écriture et la lecture du code,
    --- par exemple :
    Set MaPlage = Me.Range("B2:C8")
    ;
    • pour les mêmes raisons, n'hésites pas à utiliser aussi
    With
    et
    End With
    ;
    • évites d'utiliser des propriétés ou méthodes d'objet héritées qui pourraient ne pas exister,
    --- par exemple, au lieu de :
    Sheets(1).Range("A1")
    écrire
    Workheets(1).Range("A1")
    ,
    en effet l'objet Range n'appartient pas à Sheet mais à Worksheet ;
    • éviter d'utiliser le Presse-Papier, préfères la copie directe avec une destination
    Source.Copy Destination
    ou
    bien, pour copier uniquement les valeurs :
    Destination.valeur = Source.Valeur
    .

    0
  2. amandine.amara Messages postés 5 Statut Membre
     
    enfait c23 est ma cellule où est indiqué le texte dont va dépendre la macro
    si en cellule c 23 apparaît le mot oui par exemple il faut que se colle automatique un tableau et si non apparaît alors un autre tableau doit se coller
    0
    1. diablo13800 Messages postés 3469 Date d'inscription   Statut Membre Dernière intervention   1 872
       
      Bonjour,

      Vous avez 2 If qui sont ouvert. Il faut soit fermer les deux, soit rajouter Else devant le deuxième.

      https://www.excel-pratique.com/fr/vba/conditions.php
      0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    Salut Patrice33740
    Sans parler des select, il manque simplement un else devant le deuxieme if
    If c23 = "aerzen-MSB7" Then
        Sheets("aerzen-MSB7").Select
        Range("A1:O61").Select
        Selection.Copy
        Sheets("Feuil4").Select
        Range("D21").Select
        ActiveSheet.Paste
    ElseIf c23 = "adicomp-renner" Then
        Sheets("Adicomp-renner").Select
        Range("A1:G63").Select
        Selection.Copy
        Sheets("Feuil4").Select
        Range("D21").Select
        ActiveSheet.Paste
    End If
    
    0
    1. amandine.amara Messages postés 5 Statut Membre
       
      merci mais cela ne fonctionne toujours pas :( :( :(
      0
    2. diablo13800 Messages postés 3469 Date d'inscription   Statut Membre Dernière intervention   1 872
       
      Lisez le premier message et suivait ce qu'il dit, votre code n'est pas correcte du tout...
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      amandine.amara
      Quel est l'erreur car dans le code que vous avez mis a dispo c'est bien elseif qu'il faut vu l'erreur
      m'indique bloc if sans end if !!!!!!
      0
  4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Re,

    « enfait c23 est ma cellule ... » eh bien NON !!! Comme je t'ai dit, c23 est une variable.
    Édit : si tu avais mis Option Explicit au début du module tu t'en serais aperçu !

    Si tu veux faire référence à la valeur contenue dans cellule c23, il faut écrire
    If Activesheet.Range("c23").Value = ...

    Un excellent cours VBA gratuit :
    ftp://ftp-developpez.com/bidou/Cours/VBA/formationVBA.pdf

    0
    1. amandine.amara Messages postés 5 Statut Membre
       
      Merci beaucoup mais un message d'erreur s'affiche : erreur 1004 le collage ne peut s'effectué car les zones coller et de collage sont de tailles différentes
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Utilises Range.Copy Destination
      Toutes les explications ici :
      https://docs.microsoft.com/fr-FR/office/vba/api/Excel.Range.Copy

      EDIT : Attention, l'exemple est le type même de ce qu'il ne faut pas faire !
      0