Test IF dans une macro

Résolu/Fermé
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 - 30 déc. 2011 à 09:38
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 - 2 janv. 2012 à 08:01
Bonjour à tous,
J'ai un classeur dans lequel je remplie des étiquettes pour des expéditions (8 étiquettes par feuille A4, 4 rangées de 2). Pour cela j'utilise des trames de fond dans lesquelles je viens remplir certaines cellules. Ces valeurs sont issues d'une feuille ou les cellules sont nommées, par exemple de Depart1 à Depart99 ou Client1 à Client500.
Pour renseigner les cellules à remplir j'ai créé des macro sur le modèle ci-dessous :

Sub Ecrit_NomClient()
'Inscrit le nom du client

For i = 0 To 200
' Etiquette de gauche.
    Cells(11 + i * 15 + Int(i / 4) * 2, 6).Select		' Sélectionne la cellule F11.
   ActiveCell.Formula = "=Client" & Trim(Str(2 * i + 1)) ' Récupère le client  i.

' Etiquette de droite.
    Cells(11 + i * 15 + Int(i / 4) * 2, 17).Select	' Sélection la cellule Q11.
    ActiveCell.Formula = "=Client" & Trim(Str(2 * i + 2)) ' Récupère le client  i+1.

    Next
    Range("A1").Select
End Sub


Cela fonctionne parfaitement et je gagne un temps fou pour configurer mes étiquettes.
Ce que je souhaiterais c'est faire un teste du style

ActiveCell.FormulaR1C1 = "=IF(R[-1]C[5]="""","""",Client4)"


sur une cellule et remplir la cellule F11 dans l'exemple ci-dessus. La cellule à tester sera définie par des coordonnées X et Y car elles se situeront toujours au même endroit par rapport à la cellule à remplir.

Cela fait deux jours que je sèche sur ce problème.
Pouvez-vous m'aider.
D'avance merci
Mistral
A voir également:

8 réponses

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
30 déc. 2011 à 10:14
Bonjour,

Pasz très claire ta demande, on ne sait pas ce qui te pose problème...

Client4 doit être une cellule nommée, pas une variable.
Là on ne sait pas ce que c'est...

Si c'est une variable autant mettre directement sa valeur dans la cellule :
If ActiveCell.Offset(-1, 5) = "" Then
    ActiveCell = ""
Else
    ActiveCell = Client4
End If

eric
0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
31 déc. 2011 à 09:41
Bonjour Eric,

Merci pour ta réponse et toutes mes excuses si je nai pas clair.
Je vais préciser les choses. Premièrement ce n'est pas une variable.

Avec
ActiveCell.Formula = "=Client" & Trim(Str(2 * i + 1))
je viens écrire dans la cellule sélectionnée à la ligne du dessus la valeur contenue par la cellule nommée "Client(i)"qui se trouve sur une autre feuille du classeur.

Ce que je souhaiterais c'est écrire la même chose, dans la même cellule mais après un test sur une autre cellule (vide ou pas) de la même feuille étiquette qui est située à X et Y de la cellule à remplir.

J'ose espèrer que c'est un peu plus compréhensible comme ça.
Cordialement
Mistral
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
31 déc. 2011 à 10:59
Bonjour,

C'est le test que je t'ai écrit :
If ActiveCell.Offset(-1, 5) = "" Then
(teste 1 ligne au-dessus et 5 colonnes à droite)
Met ce que tu veux après le then et le else

eric
0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
31 déc. 2011 à 11:30
re,
Je crois qu'encore une fois je n'ai pas été très clair. Car ce que tu me propose est vrai si je fais le teste par macro à chaque fois et ce n'est pas ce que je fais.

La macro que j'ai mis dans mon tout premier message n'est utilisée qu'une seule fois lors de la création de ma feuille d'étiquette. Cette feuille est totalement protégée et ne se rempli qu'au fur et à mesure que l'on rempli un bordereau d'expédition.

ActiveCell.Formula = "=Client" & Trim(Str(2 * i + 1)) me sert qu'une seule fois pour venir écrire dans la cellule sélectée sur la ligne du de dessus ce que j'aurais pu faire manuellement en rentrant dans cette cellule =Client4, par exemple.

Moi ce que je cherche a faire c'est l'équivalent manuel de =SI(E12="";"";"Client4") mais par macro que je pourrais mettre à la suite de ActiveCell.Formula = .......

Tout ça pour m'éviter de rentrer 400 fois la même formule.
D'avance merci pour ton aide.
Mistral
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
31 déc. 2011 à 11:42
Toujours embrouillé pour moi...
Ne parle pas de ce que tu as fait mais de ce que tu veux.
Dépose un fichier exemple avec les explications dessus

eric
0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
31 déc. 2011 à 13:59
Toutes mes excuses pour être aussi brouillon.
Ci-dessous un lien vers un exemple qui devrait te permettre d'y voir plus clair.

https://www.cjoint.com/?ALFn5y6hXBr

En tout cas merci à toi.
Mistral
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié par eriiic le 31/12/2011 à 15:10
Re,

essaie avec ça :
Dim numClient As String
numClient = 1 ' met la formule qui va bien
ActiveCell.FormulaLocal = "=SI(G10="""";"""";Client" & numclient & ")"

Mais vu que tes feuilles d'étiquettes doivent être générée à chaque fois je suppose, je ne vois pas l'intérêt de mettre une formule plutôt que directement la valeur...
eric
0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
31 déc. 2011 à 15:05
Je vais essayer ce que tu me dis.
De mon côté j'ai essaye ceci

ActiveCell.Formula = "=IF(R[-1]C[5]="""";"""";Club & Trim(Str(2 * i + 1))"

Mais j'ai une Erreur d'execution 1004. Erreur définie par l'application ou par l'objet et je ne parviens pas à m'en sortir.
Peux-tu m'aider
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié par eriiic le 31/12/2011 à 15:11
ben essaie déjà ce que je t'ai fourni...
J'ai modifié la réponse car j'avais oublié de mettre numClient dans la formule.
eric
0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
31 déc. 2011 à 16:58
J'avais rectifié de moi même ...
Mais que se soit avec ta solution ou avec la mienne j'ai la même erreur :

Erreur d'execution 1004. Erreur définie par l'application ou par l'objet.

Bon si tu veux bien on verra ça l'année prochaine.
Je te souhaite une très bonne soirée et tous mes voeux pour 2012

Mistral
0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
2 janv. 2012 à 08:01
Bonjour Eric,

J'ai trouvé la solution elle se trouve ci-dessous :

Cells(12 + i * 15 + Int(i / 4) * 2, 5).Select
Index = Trim(Str(2 * i + 1))
ActiveCell.FormulaR1C1 = "=IF(R[-1]C[5]="""","""",Nom" & Index & ")"


J'ai adapté ta solution à mes besoins de manière à aller chercher la cellule à tester plus librement.
Merci pour ton aide.
Cordialement
Mistral
0