Voici donc ma situation. Voir l'image pour une meilleure compréhension. Example tableRemplissage de valeurs avec condition IF et en-têtes
Donc ce que je suis en train de faire est que, IF cellule columnn C est pas vide, Excel renseignera 3 premières lettres de la colonne B à D. columnn je macro suivante pour le faire:
Sub FillCountryCode()
Sheets("Sheet1").Range("D2:D20").Formula = "=IF(C2 <> """", LEFT(B2,3), """")"
End Sub
J'ai donc 2 problèmes avec cette solution.
1er) Si je déplace la colonne Country Code, disons à la colonne F, la macro ne fonctionnera plus car elle ne réalise pas que la colonne a été déplacée. Alors quel est le moyen le plus simple de changer la macro pour travailler afin qu'il recherche les bonnes colonnes selon nom de l'en-tête (par exemple Pays Code) et passe ensuite toutes les lignes (dans mon fichier Excel réel il y a des centaines de lignes, quand la table d'exemple a seulement 8). Donc, cela n'a pas vraiment d'importance, dans quelle colonne se trouvent les en-têtes et les cellules pertinents pour la macro.
2ème) Au moment où je détermine manuellement la plage pour la macro, quelle est la commande correcte pour faire macro vérifier toutes les lignes dans le fichier. (Toutes les lignes ont des valeurs dans Marque de voitures et Pays)
Voici la solution que je suis venu, en essayant de résoudre ce problème.
Sub FillCountryCode()
Worksheets("Sheet1").Activate
Rows(3).Select
Set CountRY = Selection.Find(What:="COUNTRY", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, searchorder:=xlByRows, searchdirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Set ENGINE = Selection.Find(What:="ENGINE", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, searchorder:=xlByRows, searchdirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Set COUNTRYCODE = Selection.Find(What:="COUNTRYCODE", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, searchorder:=xlByRows, searchdirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Dim LastItemRow As Long
LastItemRow = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row
For pointer = 4 To LastItemRow
If Cells(pointer, ENGINE.Column) <> "" Then
Cells(pointer, COUNTRYCODE.Column).Value = Sheets("Sheet1").Left(Cells(pointer, COUNTRY.Column), 3)
End If
Next pointer
End Sub
En essayant cette solution, il y a un problème dans la condition IF, mais je ne comprends pas ce qu'il est. Est-ce que quelqu'un peut m'aider? L'erreur que j'obtiens est: Erreur 438: L'objet ne supporte pas cette propriété ou méthode.
1) Vous pouvez utiliser la méthode Application.Match ou Find pour trouver la colonne correcte, puis la référence dans votre code. 2) Il existe d'innombrables exemples en ligne montrant comment trouver la dernière ligne/colonne. Avez-vous vraiment essayé et n'avez pas été en mesure d'appliquer quoi que ce soit? – SJR
Ne serait-il pas préférable de le formater en tant que table et d'utiliser les propriétés intrinsèques de la table? –
Bonjour @SJR. J'ai collé ma solution actuelle, si cela aide à répondre. – Bradi