```python
def cell_name(row: int, column: int) -> str:
    if not isinstance(row, int) or not isinstance(column, int):
        raise ValueError("Both row and column must be integers.")
    if row < 0 or column < 0:
        raise ValueError("Row and column indices must be non-negative.")
    
    letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    if column >= len(letters):
        raise ValueError("Column index exceeds the range of A-Z.")
    
    return letters[column] + str(row + 1)

def grid_cells(rows: int, columns: int) -> list:
    if not isinstance(rows, int) or not isinstance(columns, int):
        raise ValueError("Both rows and columns must be integers.")
    if rows <= 0 or columns <= 0:
        raise ValueError("Number of rows and columns must be positive.")
    
    return [cell_name(r, c) for r in range(rows) for c in range(columns)]
```