Test IF dans une macro
Résolu
Mistral_13200
Messages postés
636
Date d'inscription
Statut
Membre
Dernière intervention
-
Mistral_13200 Messages postés 636 Date d'inscription Statut Membre Dernière intervention -
Mistral_13200 Messages postés 636 Date d'inscription Statut Membre Dernière intervention -
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 :
Cela fonctionne parfaitement et je gagne un temps fou pour configurer mes étiquettes.
Ce que je souhaiterais c'est faire un teste du style
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
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:
- Test IF dans une macro
- Test performance pc - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Test steam deck oled - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Test composant pc - Guide
8 réponses
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 :
eric
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
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
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
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
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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
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
Bonjour Eric,
J'ai trouvé la solution elle se trouve ci-dessous :
J'ai adapté ta solution à mes besoins de manière à aller chercher la cellule à tester plus librement.
Merci pour ton aide.
Cordialement
Mistral
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