Problème avec fonction si dans macro
Fermé
amandine.amara
Messages postés
5
Date d'inscription
lundi 21 janvier 2019
Statut
Membre
Dernière intervention
22 janvier 2019
-
21 janv. 2019 à 15:35
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 22 janv. 2019 à 09:51
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 22 janv. 2019 à 09:51
A voir également:
- Problème avec fonction si dans macro
- Fonction si et - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Fonction moyenne excel - Guide
- Macro logiciel - Télécharger - Organisation
4 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
21 janv. 2019 à 15:56
21 janv. 2019 à 15:56
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
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 :
• pour les mêmes raisons, n'hésites pas à utiliser aussi
• é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 :
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
bien, pour copier uniquement les valeurs :
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
Withet
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 Destinationou
bien, pour copier uniquement les valeurs :
Destination.valeur = Source.Valeur.
amandine.amara
Messages postés
5
Date d'inscription
lundi 21 janvier 2019
Statut
Membre
Dernière intervention
22 janvier 2019
21 janv. 2019 à 16:28
21 janv. 2019 à 16:28
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
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
diablo13800
Messages postés
2890
Date d'inscription
jeudi 2 juillet 2015
Statut
Membre
Dernière intervention
16 février 2024
1 854
21 janv. 2019 à 16:29
21 janv. 2019 à 16:29
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
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
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
21 janv. 2019 à 16:32
21 janv. 2019 à 16:32
Bonjour,
Salut Patrice33740
Sans parler des select, il manque simplement un else devant le deuxieme if
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
amandine.amara
Messages postés
5
Date d'inscription
lundi 21 janvier 2019
Statut
Membre
Dernière intervention
22 janvier 2019
21 janv. 2019 à 16:48
21 janv. 2019 à 16:48
merci mais cela ne fonctionne toujours pas :( :( :(
diablo13800
Messages postés
2890
Date d'inscription
jeudi 2 juillet 2015
Statut
Membre
Dernière intervention
16 février 2024
1 854
21 janv. 2019 à 16:49
21 janv. 2019 à 16:49
Lisez le premier message et suivait ce qu'il dit, votre code n'est pas correcte du tout...
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
21 janv. 2019 à 17:07
21 janv. 2019 à 17:07
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 !!!!!!
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 !!!!!!
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
Modifié le 21 janv. 2019 à 17:18
Modifié le 21 janv. 2019 à 17:18
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
Un excellent cours VBA gratuit :
ftp://ftp-developpez.com/bidou/Cours/VBA/formationVBA.pdf
« 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
amandine.amara
Messages postés
5
Date d'inscription
lundi 21 janvier 2019
Statut
Membre
Dernière intervention
22 janvier 2019
22 janv. 2019 à 09:01
22 janv. 2019 à 09:01
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
Modifié le 22 janv. 2019 à 10:00
Modifié le 22 janv. 2019 à 10:00
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 !
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 !